向所有客户端发出的 SocketIO 不起作用

Posted

技术标签:

【中文标题】向所有客户端发出的 SocketIO 不起作用【英文标题】:SocketIO emit to all clients is not working 【发布时间】:2019-05-24 02:06:08 【问题描述】:

我正在尝试使用 Typescript 让 socketIO 服务器在 NodeJS 上工作。 我想要创建的具体行为是它会每 1000 毫秒向所有连接的套接字(包括它自己)发送一条消息。

我的基本套接字正在工作,当客户端连接时,'on connect' 消息会触发,这很好。

    this.io.on('connection', (socket: Socket)=>
        console.log('a user connected');
    );

所以现在要向所有客户发送消息,我必须:

        this.io.emit("newTest","Test")

然后听这个(在同一台服务器上直接下面:)

    this.io.on("newTest",(socket:Socket)=>
        console.log("Echoo")
    )

但我从来没有得到控制台记录的“回声”。 实际上,我也在监听客户端(角度 6 应用程序),当该应用程序正确连接时,它会显示“用户已连接”......(因此套接字正在工作)......this.io。 emit() 似乎并没有真正发送消息。

如果我这样做,我可以发送消息:

    this.io.on('connection', (socket: Socket)=>
        console.log('a user connected');

        socket.emit("newTest","test")
    );

而且效果很好。但是我不能这样做。io.emit().. 向所有客户端发出。我可以在连接时手动尝试捕获数组中的所有“套接字”对象,然后每当我收到一条消息时,我都会遍历它们并执行 socket.emit.. 但必须有更好的方法,我错过了什么?

【问题讨论】:

【参考方案1】:

要向所有连接的客户端发送消息,您可以使用io.sockets.emit(在服务器上):

io.on('connection', (socket: Socket) => 
    console.log('a user connected');

    io.sockets.emit('newTest', 'test');
);

查看有关此here 和here 的更多信息。

【讨论】:

【参考方案2】:
 this.io.on("newTest",(socket:Socket)=>
    console.log("Echoo")
)

这是服务器端代码吗? 它必须是客户端代码来监听发送给所有客户端的事件。 而要接收发射,您需要执行以下操作:

socket.on("newTest",(socket:Socket)=>
    console.log("Echoo")
)

这是彻底的客户端代码。 也许它会起作用。

【讨论】:

【参考方案3】:

解决了,问题就在我这边。

为了记录。 this.io.emit("testMessage",mesagecontents)

部分错误是我认为服务器本身就是客户端。

确实有效。

【讨论】:

以上是关于向所有客户端发出的 SocketIO 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

flask-socketio 在安装了 eventlet 的 aws 上不起作用

向特定用户发出的 SocketIO(不为每个客户端使用单独的房间)

Flask SocketIO 自动重新加载不起作用(在代码更改/开发中)

GatsbyJS 中的 Socket IO 客户端不起作用

尽管设置了标头,但 CORS 不起作用

https 在 react-native android 上不起作用