gpt4 book ai didi

node.js - Socket.IO 房间不在 Azure 上工作,但在本地工作

转载 作者:行者123 更新时间:2023-12-03 04:30:31 25 4
gpt4 key购买 nike

我用socket.io和node.js制作了一个简单的应用程序,它是一个推送通知服务。当用户连接到 websocket 时,发送他的用户名(和仪表板名称)并立即加入以该用户命名的房间。应用程序监听 POST 请求,保存它们,然后向用户房间发送一条消息。

io.on('connection', function(socket) {
socket.on('userid', function(data) {
socket.join(data.userid+'-'+data.dashboard);
notification.find({userid: data.userid, to: data.dashboard, received_by_user: false}, function(err, notifs) {
socket.emit('get_notifications', notifs);
}
}
});
app.post('/notify', function(req, res, next) {
var notif_recv = new notification(req.body);
notif_recv.save(function (err, notif_recv) {
io.sockets.in(notif_recv.userid+'-'+notif_recv.dashboard).emit('new_notification', notif_recv);
});
res.send(200);
});

当我在本地使用 Node 测试它时,它工作正常,我发送了 POST/notify我可以看到通知到达仪表板。问题是,当我在 Azure 上测试 AppService 时,客户端连接到 websocket 并收到第一个通知( get_notifications 事件),但是当我 POST 时至/notify ,客户端没有收到任何东西! (没有 new_notification 事件,io.sockets.in(...).emit(...) 似乎不适用于 Azure)。

出于调试目的,我使用 console.log(...) 在服务器上记录函数 socket.join(...) 的返回值和io.sockets.in(...).emit(...) ,结果是 io.socket.in(...).emit(...)似乎返回一个没有任何 channel 和连接的 io 服务器!

IIS 可能会搞乱它吗?我倾向于认为 IIS 对于 app.post('/notify'... 有不同的进程和io.on('connection'...因此,我在 app.post 上引用的套接字与我在 io.on('connection'.. 中加入用户的套接字不同(socket.join(...))。

在 Azure/IIS 中使用 socket.io 房间时有什么提示吗?谢谢!

最佳答案

您是否尝试添加“断开连接”处理程序以进行调试?

io.on('connection', function (socket) {
socket.on('disconnect', function(){ //add this part
console.log('Client disconnected');
});
socket.emit('get_notifications', "get_notifications_:"+new Date());
});

还记录每次发送和接收,以便您准确地知道客户端何时断开连接。如果在 get_notifications 事件之后断开连接,请确保您没有向客户端发送回调,或者客户端不期望来自服务器的回调。

我注意到 notification.find(..)socket.on('userid'..) 缺少一些右大括号。我希望这仅存在于您粘贴到此处的代码中。

关于node.js - Socket.IO 房间不在 Azure 上工作,但在本地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402476/

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