我正在使用Node.js并制作聊天应用程序。
假设用户A正在与用户B聊天。在每个用户开始输入时的所有聊天应用程序中,会出现一个通知,其中显示“用户X正在键入...”。
我有类似的“打字......”功能。使用这种方法:
$(document).on('keyup','form.chat input:text', function(e){
var $id = $(this).attr('id'); // text id is the user id we are chating with.
if ( $(this).val().trim().length > 0 )
socket.emit("writingOn", $id );
if ( $(this).val().trim().length === 0 )
socket.emit("writingOff", $id );
});
运作良好。但问题是:
这是一个好方法吗?因为foreach keyUp客户端向服务器发送req
提前感谢。
答案 0 :(得分:6)
这是一个好方法吗?
用于在实时编辑应用程序中发送每个击键,是的。用于提供“正在输入”功能,编号
您只需在用户开始输入时发送消息,并在他未输入某段预定时间时发送消息。对每次后续击键重置的超时使用超时。在您的情况下,您需要为他可以输入的每个字段收集一组超时。
var timeouts = {},
time = 2000;
$(document).on('keyup','form.chat input:text', function(e){
var id = this.id/*,
isEmpty = /^\s*$/.test(this.value) */;
if (id in timeouts) // if something is scheduled
clearTimeout(timeouts[id]); // remove it
else /* if (!isEmpty) */ // else this is the first stroke
socket.emit("writingOn", id);
// schedule sending the off-message, which will be canceled when another
// keystroke happens
timeouts[id] = setTimeout(function() {
socket.emit("writingOff", id);
delete timeouts[id];
}, /* isEmpty ? 0 : */ time);
});