Я настраиваю сервер веб-сокетов с socket.io, и кажется, что сообщения отправляются как минимум дважды. Иногда даже трижды. (очень редко, даже 4+ раза) Они никогда не отправляются, хотя. Как мне настроить мои обработчики или мой клиентский код, чтобы каждое сообщение получалось ровно один раз за все время?
Мой клиент работает в swift, а мой сервер в node.js. Я запускаю Ubuntu 16.04 на самом сервере.
Node.js:
// Here is an array of all connections to the server
var connections = {};
io.sockets.on('connection', newConnection);
function newConnection(socket) {
socket.on('add-user', function(user) {
connections[user.id] = {
"socket": socket.id
};
});
socket.on('chat-message', function(message) {
console.log(message);
if (connections[message.receiver]) {
console.log("Send to: " + connections[message.receiver].socket);
// Here are some varients of the emit command. Seems like they all do the same
//io.sockets.connected[connections[message.receiver].socket].emit("chat-message", message);
//io.to(connections[message.receiver].socket).emit("chat-message", message);
socket.broadcast.to(connections[message.receiver].socket).emit("chat-message", message);
} else {
console.log("Send push notification")
}
});
//Removing the socket on disconnect
socket.on('disconnect', function() {
console.log("The client disconnected");
for (var id in connections) {
if (connections[id].socket === socket.id) {
delete connections[id];
}
}
})
}
"console.log (message)"; в обработчике сообщений вызывается только один раз. Это запутанная часть для меня. Если обработчик вызывается дважды, почему он печатается только один раз? Тем не менее, на обработчике в моем быстром коде обработчик для полученных сообщений вызывается несколько раз.