Javascript 套接字Io:客户端';连接';已设置套接字时未触发事件
我在浏览器控制台中使用socketio设置websocket,以便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
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();