gpt4 book ai didi

node.js - 使用setInterval对node js执行GET请求?

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

我使用 NodeJS 和 Express 来读取 mongodb 中的集合,以向用户显示一组消息。我读过有关 http2 的内容,但我不知道与在客户端使用 setInterval 接收更新的消息列表相比是否有任何显着优势。我基本上在做:

setInterval(()=>{ 
this.props.getSession(session_id);
}, 5000);

这会获取 mongodb 文档的 _id,并每 5 秒将其通过 GET 请求发送给 Nodejs。这会在野外造成严重的问题吗?我基本上害怕这会导致大规模的可怕性能问题,但我想知道除了看起来令人难以置信的复杂 http2 实现(可能存在许多安全漏洞)之外,我还有什么替代方案。

我想我也可以将我的问题改写为,这会导致我的服务器因少数用户在某个页面上运行此代码而崩溃吗?

最佳答案

好的,我已经找到了处理这个问题的最佳方法,过多关注消息在数据库中的存在方式是没有帮助的。我最终使用了一个名为 socket.io 的网络套接字库。我能够为页面加载时连接到服务器的每个组创建独特的“房间”。消息 session 的mongodb_id用于动态创建房间,如下:

io.on('connection', async function(socket){
socket.on('session' async (session)=>{
socket.join(session.session_id); //not shown: session join authentication
});
socket.on('send', async (d)=>{


try{
const {text} = d.body;
const {token, session} = d.head;
//custom function that is async to parse jwt token and do db.MessageSession.create({})
const result = await socketMeassageAuthAndSend(session, token, text);
const {flag, user, _id, date} = result;

if(flag === 'auth'){
socket.broadcast.to(session).emit('socket_message_broadcast', {text,user,_id,date})
}else{
socket.emit("unauthorized", {message: "will place ip address here to send to admin panel"});
}}catch(err){
console.log(err);
}
});

这可以执行通过 mongo 数据库进行身份验证和授权的更新。 Mongoose 不需要事件驱动,它可以使数据库与用户的 View 实时同步。

关于node.js - 使用setInterval对node js执行GET请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104065/

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