Javascript 套接字Io:客户端';连接';已设置套接字时未触发事件

Javascript 套接字Io:客户端';连接';已设置套接字时未触发事件,javascript,sockets,socket.io,listener,Javascript,Sockets,Socket.io,Listener,我在浏览器控制台中使用socketio设置websocket,以便 socket.socket.connected 返回true。但如果我再加上: socket.on('connect', function () {console.log('some'); }); 未发生任何情况,即未记录“某些”。这是来自官方socket io页面: var socket = io.connect(); socket.on('connect', function () { socket.e

我在浏览器控制台中使用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()之后,我得到了一个负载不合理的客户端,这样在设置侦听器之前就建立了连接,那么我就会遇到麻烦,因为侦听器从未启动

  • 这是正确的吗
  • 如何设置在这两种情况下都激发的侦听器:
  • 设置侦听器时,尚未建立连接
  • 设置侦听器时已建立连接
谢谢你,并致以最良好的问候

callBackOnConnect: function(socket, callback) {
    if (socket.socket.connected) {
        callback();
    } else {
        socket.on('connect', function() {
            callback();
        });
    }
}

好吧,这是安全的-虽然不是很确定。

虽然我在文档中找不到它,但在调用io.connect()后,我运行了一些测试,给客户端带来了很大的压力。在所有情况下,客户端的“connect”事件都是在最后一个侦听器设置好之后触发的。例如:(感谢JavaScript延迟)

var socket=io.connect();
//www.sean.co.uk
函数pausecomp(毫秒)
{
变量日期=新日期();
var curDate=null;
do{curDate=new Date();}
while(curDate日期<毫秒);
}
//持续处理5秒以模拟
//任何CPU密集型进程
pausecomp(5000);
//侦听器在延迟后被设置
socket.on('connect',function(){
//将比较触发connect事件的时间
//使用侦听器的设置时间
log(new Date().getTime()-setUpTime);
});
//将记录侦听器设置的时间
var setUpTime=new Date().getTime();
每次我运行这个,我都会记录一个积极的结果(而不是根本没有结果)。有趣的是,暂停越高,“连接”启动所需的时间越长。我知道这不是证据,但至少是暗示


关于什么时候应该设置侦听器,只要它们在io.connect()之后,并且不在回调内部,它们就会在服务器触发“连接”事件之前设置,据我所知,该事件发生在客户端的“连接”事件之前。如果有人能为我指出一个资源的方向,让我详细了解如何以及何时调用这些内置事件,我将不胜感激,但据我所知,它们只是工作,而不必担心这些事情。

我现在也有同样的问题,你解决了这个问题吗?我发布了我当前的解决方案作为答案。
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();