我正在尝试设置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);
}
}
这很粗糙,但是您应该明白这一点。