我正在使用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在不同的服务器上做过类似的事情,没有遇到过这种连接问题。如有任何帮助或指示,我们将不胜感激。谢谢
我在另一个名为ws
的库中遇到了同样的问题,我试图通过删除从客户端阵列发送断开连接请求的特定客户端来正确处理断开连接方法。我不知道怎么做,但它解决了我的问题。
clients = []
io.on('connection', function(socket){
clients.push(socket);
// above methods
socket.on('disconnect', function(){
console.log("disconnected");
deleteFromArray(clients, socket.id);
});
});
function deleteFromArray(arr, element) {
position = arr.indexOf(element);
arr.splice(position, 1);
}