使用 Node.js 和 Socket.io 将更改推送到所有客户端
Posted
技术标签:
【中文标题】使用 Node.js 和 Socket.io 将更改推送到所有客户端【英文标题】:Pushing changes to all clients with Node.js and Socket.io 【发布时间】:2013-11-17 15:00:26 【问题描述】:我有一个使用套接字的工作服务器。我的服务器端代码如下所示:
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
,但是当计数器的值增加时,我看不到客户端上正在更新的新值。为什么没有向我的客户发送新数据?
【问题讨论】:
http://***.com/questions/7352164/… 【参考方案1】:您仅在连接时发出信息。例如,如果您只想每分钟广播一次信息 - 只需将您的代码更改为:
io.sockets.on('connection', function(socket)
setInterval(function()
socket.emit('status', counter: count );
, 60 * 1000);
);
这将在连接时创建一个间隔,然后每分钟发出一次消息。
如果你想要更高级的东西,例如监听计数的变化,你需要使用更高级的机制订阅它的变化。
更新
实现此目的的另一种方法是在计数器更改时发出(使用更新它的相同函数)。
还有一种方法是使用实验性的observe feature on a javascript object。
【讨论】:
【参考方案2】:这个问题已经回答了。
见:Update all clients using Socket.io?
基本信息是:您需要从全局套接字 io 而不是单个套接字发出消息。
socket.emit()
只发射到一个套接字。 io.socket.emit()
会将消息发送到所有套接字(广播消息)。
【讨论】:
以上是关于使用 Node.js 和 Socket.io 将更改推送到所有客户端的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Asterisk ARI 与 socket.io 和 Node.js 一起使用