我只是想尝试使用Socket.io创建一个简单的应用程序。我正在尝试向所有连接的用户发送通知(技术上,发出事件),如果特定用户,用户X已断开连接,用户X已离开或已断开连接。 这是我的服务器端代码。
io.on('connection', function(socket){
console.log('Connected! ' + socket.id);
socket.on('disconnect', function(){
for(var i=0;i<onlineUsers.length;i++)
{
if(onlineUsers[i].socketId == socket.id)
{
var newMessage = {};
newMessage.socketId = onlineUsers[i].socketId;
newMessage.fullName = onlineUsers[i].fullName;
newMessage.message = newMessage.fullName + " IS DISCONNETED!";
io.emit('newMessage', newMessage);
onlineUsers.splice(i,1);
console.log('splicing id ' + socket.id);
}
}
}
我猜代码正在执行,但需要很长时间才能发出断开连接事件。客户端断开连接后大约2分钟我收到断开连接消息。为什么需要这么长时间?这段代码可能有什么问题?
我也无法理解客户端何时被视为断开连接。如果应用关闭,或浏览器关闭或互联网出现故障?
提前致谢。
更新:我在Cloud9上进行了测试部署,我的实时部署在Azure云上。我已经意识到Cloud9的工作非常完美,这似乎是Azure的一个问题。
更新2:每当我断开/关闭/刷新我的Web客户端时,我立即得到服务器发出的断开事件。我的移动客户端也不会发生同样的情况。为什么?