Socket.IO manejo del evento de desconexión
No puede manejar este evento de desconexión, no sé por qué socket no se envía al cliente / cliente no responde!
Servidor
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;
});
});
Cliente
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);
});
});
Como puede ver cuando un cliente desconecta el objeto Array [person_name] debe eliminarse, pero no es
3 answers
Ok, en lugar de identificar a los jugadores por el nombre de la pista con sockets a través de los cuales se han conectado. Puede tener una implementación como
Servidor
var allClients = [];
io.sockets.on('connection', function(socket) {
allClients.push(socket);
socket.on('disconnect', function() {
console.log('Got disconnect!');
var i = allClients.indexOf(socket);
allClients.splice(i, 1);
});
});
Espero que esto te ayude a pensar de otra manera
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-28 21:34:28
Para aquellos como @sha1 preguntándose por qué el código de la OP no funciona -
La lógica de OP para eliminar el reproductor en el lado del servidor está en el controlador para el evento DelPlayer
,
y el código que emite este evento (DelPlayer
) está dentro de disconnected
devolución de llamada de evento del cliente.
El código del lado del servidor que emite este evento disconnected
está dentro del callback de evento disconnect
que se dispara cuando el socket pierde la conexión. Dado que el socket ya perdió la conexión, disconnected
evento no alcanza el cliente.
Accepted solution ejecuta la lógica en el evento disconnect
en el lado del servidor, que se dispara cuando el socket se desconecta, por lo tanto funciona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-24 11:23:06
import * as Server from 'socket.io';
const io = Server();
io.listen(3000);
export const connections = new Map();
io.on('connection', function (c) {
connections.set(c, c);
c.once('disconnect', function () {
connections.delete(c);
});
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-25 00:47:19