使用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} ,但是当计数器的值增加时,我看不到客户端上正在更新的新值。 为什么没有新的数据被发送到我的客户?

只有在连接后才能发送信息。 例如,如果您只是想每分钟播放一次信息,只需将您的代码更改为:

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

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

如果你想要更高级的东西,比如监听count的改变,你需要使用更高级的机制来订阅更改。

更新

另一种实现这一点的方法是在柜台发生变化(使用更新它的相同function)。

另一种方法是在javascript对象上使用实验观察function 。

这个问题已经回答了。

请参阅: 使用Socket.io更新所有客户端?

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

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