[英]Socket.io hang after sending too many request on node server
我正在使用Node js、socket.io、React js开发一个聊天应用程序,我在其中向节点服务器发送套接字事件,它调用另一个 API(节点 js)来将数据(消息)保存在 DB 上。 当我尝试非常快速地发送消息时,之后节点服务器挂起并且套接字断开连接并频繁连接。 有时(大约 5 分钟)节点服务器会完美运行。 请告诉我我做错了什么。
目前,我只测试 2 个用户。
这是一个代码片段。
io.on('RequestSendNewMessage', (message)=>{
// console.log('message', message);
headers['wh-user-id'] = message.user_id;
makeRequest({data: message, method: 'POST', url: `${workstream}/v1/workstream/send-message`, headers})
.then( async (response) => {
const message_count = await makeRequest({params: {}, method: 'GET', url: `${workstream}/v1/workstream/message-count`, headers})
socket.emit('RespondNewMessageCount', message_count.data.data);
socket.emit('RespondSendNewMessage', response.data);
})
.catch(error => {
console.log('errror', error.response.data);
socket.emit('newMessageError', error.response.data)
})
})
强烈建议在这些场景中使用消息队列...只要您调用另一个 api 执行一些 DB 操作,它会使您的节点线程忙...
为了避免这种情况,您可以将消息存储在通过套接字接收的消息队列工具(RabbitMQ)中,并关闭连接,这样可以理想地利用节点线程
稍后发布到 RabbitMQ 的消息可以由您的工作人员(单独的节点服务器)使用,它将负责将消息存储到您的数据库中并发送聊天消息....由于工作人员受到消息队列的影响,它会一个接一个(FIFO)消息工作,不会发生混乱
请参考: https://medium.com/better-programming/implementing-rabbitmq-with-node-js-93e15a44a9cc
(注意:最好把worker作为一个单独的服务器)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.