node.js - 无法更新连接用户数(Node.js 和 Socket.io)

标签 node.js socket.io ecmascript-6

使用 vanilla node.js 测试 socket.io,我正在制作一个简单的应用程序来显示在线用户数,为简单起见,使用窗口标题。它在服务器的控制台端工作正常,但当我打开新选项卡时,它没有在客户端浏览器上更新。这里有什么问题?代码如下:

var html = `
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io();
        socket.on('count updated', (data) => {
            //Worked on the current tab, didn't updating on the other tabs
            document.title = data + ' User(s) Online';
        });
    </script>
`;

var count = 0;    

var server = require('http').createServer((req, res) => {
    res.end(html);
});

var io = require('socket.io')(server).on('connection', (socket) => {

    console.log(`${++count} User(s) Online`); //worked fine
    socket.emit('count updated', count); //worked once

    socket.on('disconnect', () => {
        console.log(`${--count} User(s) Online`); //worked fine
        socket.emit('count updated', count); //didn't worked
    });
});

server.listen(80);

最佳答案

你不能像那样向刚刚断开连接的套接字发出信号。不过,您可以将计数广播给所有已连接用户。为此,请将 socket.emit('count Updated', ..) 的实例替换为:

io.sockets.emit('count updated', count);

或者更简单:

io.emit('count updated', count);

关于node.js - 无法更新连接用户数(Node.js 和 Socket.io),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36390852/

相关文章:

node.js - Nodejs socket.io 根据连接的客户端数量向客户端发送消息

javascript - socket.io 不增加变量 jquery

ecmascript-6 - 使用 Object.assign 将对象数组与对象合并

javascript - 检查对象字段的数据是否与 native JavaScript 上的指定条件匹配

javascript - NodeJS 服务器 "swallows" header 字段

node.js - 如何在运行express js服务器时使用forever

node.js - jsreport 简单报告 - 无输出

ios - 如何实现 URLSessionDelegate 以允许自签名证书? (iOS/swift )

javascript - 如何在 Reactjs 上调用可重用组件时更改属性值?

node.js - Mongoose 查询子文档