我在浏览器控制台中设置了带有socketio的websocket,以便
socket.socket.connected
返回true。但如果我再添加:
socket.on('connect', function () {console.log('some'); });
没有任何反应,即'某些'未记录。这是来自官方socket-io页面:
var socket = io.connect();
socket.on('connect', function () {
socket.emit('ferret', 'tobi', function (data) {
console.log(data);
});
});
我认为这段代码正常运行。但我现在怀疑它只能起作用,因为当设置了监听器(即socket.on...
)时,套接字没有连接,只是因为设置连接的延迟,当连接时监听器处于活动状态。成立。如果这是正确的,那么这意味着如果我在调用io.connect()之后得到一个具有不合理高负载的客户端,以便在设置监听器之前建立连接,那么因为监听器而遇到麻烦永远不会开火。
谢谢你,以及最好的问候
答案 0 :(得分:0)
callBackOnConnect: function(socket, callback) {
if (socket.socket.connected) {
callback();
} else {
socket.on('connect', function() {
callback();
});
}
}
AFAIK这是安全的 - 虽然不是很确定。
答案 1 :(得分:0)
虽然我在文档中找不到它,但在调用io.connect()之后,我运行了一些测试对客户端施加了很大的压力。在所有情况下,客户端的“connect”事件在设置完最后一个侦听器后触发。例如:(感谢www.sean.co.uk的JavaScript延迟)
var socket = io.connect();
// www.sean.co.uk
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
//keeps processing for 5 seconds to simulate
//any CPU-intensive process
pausecomp(5000);
//listener gets set up after delay
socket.on('connect', function() {
//the time that the connect event is fired is compared
//with the listener's set up time
console.log(new Date().getTime() - setUpTime);
});
//the time that the listeners are set up is logged
var setUpTime = new Date().getTime();
每次我跑这个时,都记录了一个积极的结果(而不是根本没有得到结果)。有趣的是,暂停越高,设置“连接”后就越长。我知道这不是证明,但它至少是暗示性的。
关于何时应该设置监听器,只要它们位于io.connect()之后并且它们不在回调内,它们将在服务器触发'connection'事件之前设置,我可以告诉客户的'connect'事件。如果有人能指出我的资源方向,详细了解如何以及何时调用这些内置事件,我将不胜感激,但据我所知,他们只是工作而不必担心这些事情。