gpt4 book ai didi

event-handling - 为长轮询发出用户特定的事件

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

对用户特定事件实现长轮询的最佳方法是什么?我为每个用户都有一个“主页提要”,我希望在新信息出现时立即对其进行动态更新。

例如,现在我正在从客户端向/register?id=2 发出 AJAX 调用,以监听更新。当与用户(id=2)相关的其他事件(eventid=3)发生时,服务器本身会向/emit?id=2&eventid=3 发送 GET 请求。 Node.js 服务器的代码类似于以下内容:

var event_emitter = new events.EventEmitter();
http.createServer(function(req,res) {

var uriParse = url.parse(req.url,true);
var pathname = uriParse.pathname;
if (pathname=="/register") {
var userid = uriParse.query.id;
var thisRes = res;
event_emitter.addListener('event'+userid,function(eventid){
if (thisRes) {
console.log(thisRes);
thisRes.writeHead(200, { "Content-Type": "text/plain" });
thisRes.end(eventid);
thisRes = null;
}
});
} else if (pathname=="/emit") {
var userid = uriParse.query.id;
var eventid = uriParse.query.eventid;
event_emitter.emit('event'+userid,eventid);
res.writeHead(200, { "Content-Type": "text/plain" });
res.end('success');
}

}).listen(3000,"0.0.0.0");

因此,在事件发生之前客户端的 AJAX 调用不会加载,此时服务器会返回带有 eventid 的响应。客户端使用此 eventid 进行不同的 AJAX 调用(不相关,因为我使用 Django 作为主应用程序,但使用 Node.js 作为事件驱动的 super 功能)。

随着越来越多的用户连接,我只是为“event2”“event454”等创建如此多的监听器而烦恼。这可以通过 Node.js 之类的东西进行扩展吗?我还能如何发出用户特定的事件?

提前致谢!

最佳答案

您可以在发出事件后使用 removeAllListeners 删除监听器。

关于event-handling - 为长轮询发出用户特定的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917443/

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