我正在尝试设置socket.io聊天服务器。我已经做好了发送和接收来自服务器和客户端的消息的准备。我有兴趣向用户显示是否有人在打字。我知道当有人从客户端到服务器键入内容时,我可以发出通知,也可以将其广播给其他用户。但是在每次键入键时都这样做会有效吗?我该如何处理这种情况?下面是我现在的代码:

$("#textbox").keyup(function (e)  {
 if (e.keyCode == 13)  {
  socket.emit('send', {nickname: $('#nickname').val() , msg: $("#textbox").val()});
      $('#textbox').val('');  }
 else{
  socket.emit('is typing',  {nickname: $('#nickname').val()});
     }
});

在服务器端:
socket.on('is typing', function(data){
 socket.broadcast.emit('typing', {nickname: data.nickname});
});

最佳答案

您可以使用超时来发送“开始输入”和“停止输入”消息,如下所示:

var typing = false;
var timeout = undefined;

function timeoutFunction(){
  typing = false;
  socket.emit(noLongerTypingMessage);
}

function onKeyDownNotEnter(){
  if(typing == false) {
    typing = true
    socket.emit(typingMessage);
    timeout = setTimeout(timeoutFunction, 5000);
  } else {
    clearTimeout(timeout);
    timeout = setTimeout(timeoutFunction, 5000);
  }

}

这很粗糙,但是您应该明白这一点。

10-06 07:38