我有一个使用套接字的工作服务器。我的服务器端代码如下所示:
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}
,但是当计数器的值递增时,我看不到客户端上正在更新的新值。为什么没有新数据发送给我的客户?
答案 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)
这个问题已经回答了。
基本信息是:您需要从全局套接字发出消息,而不是单个套接字。
socket.emit()
仅发送到一个套接字。其中io.socket.emit()
将消息发送到所有套接字(广播消息)。