我在聊天应用中使用socket.io。 (HTML + JS& node js)。当一个客户端连接到它时,它工作得很好。
但是当打开另一个窗口开始聊天时,聊天变得非常慢。当三个或四个用户同时连接到聊天时,它变得更慢,看起来,它几乎被冻结了。
仅供参考,在整个申请过程中,我使用了World
(并且没有回调)。我的要求是,从客户端收到消息,回复客户端。用户将与机器人(服务器)聊天。据说,用户(发送到服务器)发送的消息不会被发送给任何其他用户。所以,我发现socket.emit()
是处理这种情况的正确方法。
我弄错了吗?我应该用其他方式发光吗?
注意: -
当使用内置节点js服务器在enide工作室内运行时,该应用程序可以正常工作。但是,部署时,事件非常缓慢。
更新: -
我尝试在Chrome中启动聊天,在IE中进行另一次聊天。同样的问题。所以,问题不在于客户端。
更新2: -
当我调试时,我发现问题出在socket.emit()
并带有回调。以下是导致问题的片段
socket.emit()
在控制台中,我在 check 2 &之间的时间差距很大。 检查3 。
以下是控制台日志
//socketRouter.js
exports.requestData = function(callback)
{
console.log("check 1");
this.socket.emit('requestData',callback);
}
//flow.js
function flow()
{
pipeline([
socketRouter.requestData,
processData
],
{socket:socket});
}
var pipeline = function(funcs, scope) {
(function next() {
if(funcs.length > 0) {
funcs.shift().apply(scope || {}, [next].concat(Array.prototype.slice.call(arguments, 0)));
console.log("check 2");
}
})();
};
function processData()
{
console.length("check 3");
//process continues...
}
//client side
socket.on('requestData', function(callback) {
console.log("UI check");
if(typeof callback === "function")
callback(data);
});
我开始怀疑check 1
check 2
//program freezes here for sometime.
check 3
或socket.emit()
函数是否真的存在问题。但是pipeline()
函数在应用程序的所有其他部分中运行得非常好。