为用户特定事件实施长轮询的最佳方法是什么?我为每个用户提供了一个“主页”,我希望在新信息出现时立即动态更新。
现在我正在从客户端进行AJAX调用/ register?id = 2,例如,监听更新。当发生与用户(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用于事件驱动的超级权限)。
随着更多用户连接,为“event2”“event454”等创建了如此多的监听器,我感到很困扰。这是可扩展的Node.js吗?我怎样才能发出特定于用户的事件?
提前致谢!
答案 0 :(得分:0)
您可以在使用removeAllListeners
发出事件后删除侦听器。