【发布时间】:2016-07-29 18:32:28
【问题描述】:
我正在使用 Socket.io 在电话和网页之间进行一些通信,但我遇到了服务器不断断开连接的问题。我看到很多其他人发布关于 Socket.io 的帖子,他们的连接在空闲大约 5 分钟左右后断开,但这是一个不断发出来回信息的连接,也是我最长的连接能够保持连接大约需要 30 秒。
我正在运行的服务器端代码是:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
socket.on('create', function (room) {
socket.join(room);
});
socket.on('player-move', function(msg){
roomId = msg['room'];
move = msg['action'];
socket.broadcast.to(roomId).emit('player-move', move);
});
socket.on('disconnect', function() {
console.log('someone has disconnected');
});
});
http.listen(443, function(){
console.log('listening on *:443');
});
客户端是非常基本的发射事件。这是一个例子:
$( "#arrow-left" ).on( "touchstart", function(){
var senddata = { "room": roomId, "action": "d-l" };
socket.emit( "player-move", senddata );
});
一切似乎都运行良好,直到一切开始后 5-30 秒,然后连接才断开。连接通常会在 5-10 秒后重新启动。有没有人遇到过类似的问题?这可能是服务器而不是代码的问题吗?我以前用 Socket.io 在不同的服务器上做过类似的事情,并且没有遇到过这种连接问题。任何帮助或方向将不胜感激。谢谢!
【问题讨论】:
-
您的服务器的
var声明在哪里?roomId =、move =将在非严格模式下在全局范围内定义这些变量,并在严格模式下彻底崩溃您的服务器。客户在哪里得到roomId?如果它未定义,也可能会导致服务器崩溃,因为您基本上是在告诉服务器运行socket.broadcast.to(undefined).emit(...); -
客户端和服务器之间是否有任何可能导致套接字超时的基础设施?您确定您的服务器一直在运行而不是重新启动吗?
-
您确定他们正在断开连接吗?连接也可能会退回到长轮询而不是持久连接,这可能由于多种原因而发生,并且看起来像是未连接。
-
我很确定它正在断开连接。每次出现问题时,控制台都会记录“有人已断开连接”。只是为了覆盖我的基地,我关闭了手机上的 wifi,但问题也发生在其他人身上。我还继续确保在该函数的范围内声明了 roomId 和 move 变量。我不知道答案是哪一个,但它似乎不再断开连接。
标签: node.js websocket socket.io