2

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

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

4

2 回答 2

2

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

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

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

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

更新

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

另一种方法是在 javascript 对象上使用实验性观察功能

于 2013-11-06T11:41:05.887 回答
0

这个问题已经回答了。

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

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

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

于 2013-11-06T11:41:54.013 回答