SocketIO 通过 API 路由向客户端发送消息

Posted

技术标签:

【中文标题】SocketIO 通过 API 路由向客户端发送消息【英文标题】:SocketIO send message to client via API route 【发布时间】:2022-01-15 16:24:45 【问题描述】:

我的express API 中有一条路由,我想使用 websocket 向客户端发送消息。在这种情况下,客户端是另一个 Node.js 应用程序。在这个 Node.js 应用程序中,我尝试连接到套接字并打印收到的消息。 API 和 Node 应用程序都在不同的端口上。有人可以帮我完成这项工作吗?

以下是我如何将套接字传递给我的快速路线:

const server = app.listen(PORT, () => 
    console.log(`Server on port $PORT`);
);

const io = require("socket.io")(server);
app.set("socketio", io);

这是我的 REST API 路由:

exports.getAll = function(req,res)
    var io = req.app.get('socketio');
    io.emit('hi!');

这是我的socket io客户端,它使用socket.io-client

const socket = io('http://localhost:3000');

socket.on("message", data => 
    console.log(data);
);

很遗憾,我没有从我的 API 收到“嗨”消息。

当我致电 /api/getAll 时,我的客户端应用程序中没有收到消息。

【问题讨论】:

【参考方案1】:

通过socket.io 发出事件时,您需要在数据之前定义事件名称。 示例:

exports.getAll = function(req, res)
    var io = req.app.get("socketio");
    io.emit("message", "hi!");

现在您将能够接收来自客户端的message 事件。

参考:

https://socket.io/docs/v4/emitting-events/

【讨论】:

以上是关于SocketIO 通过 API 路由向客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章

为啥socketio广播向除了发送它的那个客户端之外的所有客户端发送?

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

使用flask_socketio实现客户端间即时通信

IOAcknowledge 方法不适用于 Android 中的 SocketIO?

ios中SocketIO的实现

带有广播 = true 的 Flask SocketIO Emit 不会向发送者发送消息