gpt4 book ai didi

node.js - 从 ExpressJS 请求中识别 websocket

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:03 25 4
gpt4 key购买 nike

如何使用 Express POST 请求作为 socket.io 广播(而不是套接字消息)的基础?

var app    = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

app.post('/campaigns', function(req, res, next) {
var campaign = new Campaign(req.body);
campaign.save(function(err, campaign) {
if (err) {
next(err);
} else {
res.json(campaign);

// how to broadcast a message to everyone
// except the sender of this POST request?
io.of('/campaigns').emit('new', campaign);
}
});
});

最佳答案

非常简单。

每次建立与服务器的连接时,您的 socket 对象都会有与此连接关联的 ID。将其保存在客户端的某个变量中。

然后每次向服务器发送请求时,都将套接字 ID 添加到查询参数中。服务器端收到 POST 请求后,将消息广播给所有用户,并将套接字 ID 广播给消息。在客户端修改 message 事件,如果客户端的套接字 ID 等于作为消息中的额外参数接收的套接字 ID,则添加一个逻辑来跳过/隐藏收到的消息。

陷阱

  1. 如果由于某种原因在 POST 请求之后客户端断开连接并重新连接到服务器,则可能无法工作 - 在这种情况下,在收到返回的消息后,客户端将拥有新的套接字 ID,该 ID 与发送 POST 请求之前的套接字 ID 不同。在这种情况下,您将必须提出一些更独立于连接的客户端 ID 方案来识别客户端并使用它而不是 socket.id 作为标识符。您可以尝试使用 session 。

  2. 即使消息不显示,客户端仍然会收到消息。

  3. 结合客户端-服务器“相互通信”方法并使用另一种方法并不好,反之亦然。

关于node.js - 从 ExpressJS 请求中识别 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33948008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com