目前,我正在使用nodejsexpress实现一个API,然后它需要连接到socket.io并发送事件。
该API位于socket.io-client(客户端),它连接到socket.io(服务器)
第一次 API 调用:success
第一次调用 API 时会建立连接,发送消息并且可以断开套接字,并在客户端和服务器端调用“disconnect”回调。
第二次 API 调用:failure
当第二次调用 API 时,无法建立与服务器的连接,客户端的“客户端”回调不会被调用。
第三次 API 调用:success
然后我尝试重新启动客户端,保持其他内容不变。再次调用API,成功连接到socket.io,一切正常。
谁能解释一下这背后的逻辑?
Updated
客户端.js
App.getByUserId(message.to_id, function(error, app) {
var socket = io.connect('http://127.0.0.1:9002');
socket.on('connect', function(){
console.log("client connect socket id:" + socket.id);
console.log("appkey:" + app.private_token);
socket.emit('appkey.check',{appkey: app.private_token, uuid: message.to_id.uuid}, function(data){
socket.emit("forceDisconnect");
socket = null;
});
});
您只是遇到了 Socket.IO 的众多“功能”或“错误”之一,具体取决于您如何看待这一点。 Socket.IO 尝试变得聪明并重用连接(这实际上会导致很多连接问题)解决这个问题的方法是使用force new connection
选项在你的io.connect
:
io.connect('http://127.0.0.1:9002', { 'force new connection': true });
你还可以做的是使用https://github.com/primus/primus https://github.com/primus/primus如果您使用 socket.io 转换器,它会包装 Socket.IO。在内部,它完全消除了对io.connect
并使用更低的级别io.Socket
构造函数来创建比普通 socket.io 更稳定的连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)