【发布时间】:2013-06-21 15:49:51
【问题描述】:
无法处理这个断开连接事件,不知道为什么socket没有发送到客户端/客户端没有响应!
服务器
io.sockets.on('connection', function (socket) {
socket.on('NewPlayer', function(data1) {
online = online + 1;
console.log('Online players : ' + online);
console.log('New player connected : ' + data1);
Players[data1] = data1;
console.log(Players);
});
socket.on('DelPlayer', function(data) {
delete Players[data];
console.log(Players);
console.log('Adios' + data);
});
socket.on('disconnect', function () {
socket.emit('disconnected');
online = online - 1;
});
});
客户
var socket = io.connect('http://localhost');
socket.on('connect', function () {
person_name = prompt("Welcome. Please enter your name");
socket.emit('NewPlayer', person_name);
socket.on('disconnected', function() {
socket.emit('DelPlayer', person_name);
});
});
如您所见,当客户端断开连接时,应该删除 Array 对象[person_name],但事实并非如此。
【问题讨论】:
-
你最好换个方式试试,先删除播放器再断开连接。因为一旦您与服务器断开连接,服务器将无法接收客户端发出的事件。跟踪套接字而不是播放器,通过它您可以轻松移除播放器。
-
我应该如何删除播放器然后断开连接?我怎么知道播放器何时会断开连接?。
-
客户端上的事件不应该是
'disconnect'而不是'disconnected'吗? -
@Sherlock 在 OP 的原始客户端代码中,他们试图侦听自定义事件,他们正在触发服务器端的断开逻辑。 “断开连接”确实是内置的断开连接事件,但它不会直接导致他们遇到的问题。
标签: javascript socket.io disconnect