我已经很长时间没有使用socket.io了,所以我还是很习惯它。
我的问题是服务器多次发出一条消息。我不确定;但我相信这是因为客户端已多次连接。
我尝试了很多解决方案,但似乎都没有用。我已经放置了一段代码。
Server.js
var param = req.param.id;
var snakeIO = io.of('/snake/'+param);
snakeIO.on('connection', (socket) => {
socket.on('message', (name, message) => {
name = req.session.username;
snakeIO.emit('message', name, message);
});
});
Client.js
var snakeIO = io('/snake/'+window.location.pathname.split("/")[2], { forceNew: true });
snakeIO.on('connect', () => {
console.log('Connected to snake IO.');
});
snakeIO.on('message', (name, msg) => {
messages = document.getElementById('messages');
message = document.createElement('div');
message.classList.add('list-group-item');
message.classList.add('bg-dark');
message.innerHTML = "<b>" + name + "</b> - " + msg;
messages.appendChild(message);
});
function sendMessage(){
message = document.getElementById('sendMessage');
snakeIO.emit('message', 'U/A', message.value);
message.value = "";
}
注意:
如果我将console.log(socket.id)
添加到server.js,则它会报告
/snake/1#WoESDodIxDq2qVDyAAAZ
/snake/1#WoESDodIxDq2qVDyAAAZ
/snake/1#WoESDodIxDq2qVDyAAAZ
/snake/1#...
该事件乘以重复项的数量。