使用Node.js和Socket.io将更改推送到所有客户端

时间:2013-11-06 11:32:08

标签: node.js socket.io

我有一个使用套接字的工作服务器。我的服务器端代码如下所示:

io.sockets.on('connection', function(socket) {
  socket.emit('status', { counter: count });
});

在这个例子中,我只是每分钟将计数器递增1。当计数器更新时,我想将当前计数发送给所有客户端。我的index.html文件如下所示:

<script>
var socket = io.connect('http://localhost');
socket.on('status', function (data) {
  console.log(data);
});
</script>

当我启动服务器时,我可以看到第一个数据发送到客户端{'counter': 0},但是当计数器的值递增时,我看不到客户端上正在更新的新值。为什么没有新数据发送给我的客户?

2 个答案:

答案 0 :(得分:2)

仅在连接时发出信息。例如,如果您只想每分钟广播一次信息 - 只需将代码更改为:

io.sockets.on('connection', function(socket) {
  setInterval(function() {
    socket.emit('status', { counter: count });
  }, 60 * 1000);
});

这将在连接时创建一个间隔,然后每分钟发出一次消息。

如果您想要更高级的内容,例如收听计数更改,您需要使用更高级的机制订阅更改。

更新

实现此目的的另一种方法是在计数器更改时发出(使用更新它的相同功能)。

另一种方法是使用实​​验observe feature on a javascript object

答案 1 :(得分:0)

这个问题已经回答了。

请参阅:Update all clients using Socket.io?

基本信息是:您需要从全局套接字发出消息,而不是单个套接字。

socket.emit()仅发送到一个套接字。其中io.socket.emit()将消息发送到所有套接字(广播消息)。