0
我有一个设置,服务器正在侦听客户端,然后向他们发送实时通知。服务器的代码如下所示:每次刷新都会将另一个监听器添加到socket.io连接
var io = require('socket.io').listen(8888);
io.sockets.on('connection', function (socket) {
\t socket.emit('connected', { connected: true });
\t console.log("New user " + socket.id);
\t socket.on('ready for data', function (data) {
\t pg_client.on('notification', function(content) {
socket.broadcast.to('ROOM').emit('update', content)
});
});
});
\t \t \t
每当一个通知从DB进来,在ROOM
所有客户端得到的消息。这是有效的,但是如果客户端刷新他们的页面,他们现在正在监听两次,并为每个更新获取两个通知。 socket.id
的补充,但永远不会消失。下面是客户端代码:
var socket = require('socket.io-client')('http://IP:8888')
socket.on('connected', function (data) {
\t socket.emit('ready for data', {});
});
// Triggered by an addChannel function
socket.emit('add room', {room: 'ROOM'})
socket.on('update', function(data) {
// This gets hit multiple times per update, depending on the number of client refreshes
})
我试图在客户端和没有运气的服务器端都替换为once
on
。这将导致只有第一次更新才能通过,而不是其他
这会导致错误'socket is not defined',因为我们在回调之外不再有'socket'。编辑:也许你可以遍历所有连接的客户端,但除非我错过了一些东西,这对socket.io来说很棘手。 –
@BonnieScott - 将'socket.broadcast.to()'改为'io.to()'。 – jfriend00
谢谢。这似乎现在正在进行全面验证... –