2011-02-07 29 views
1

針對用戶特定事件實施長輪詢的最佳方式是什麼?我有一個「家庭飼料」爲每個用戶,我想立即動態更新新的信息,因爲它來。針對長期輪詢發出用戶特定事件

現在我正在從客戶端的AJAX調用/註冊?ID = 2,例如,傾聽更新。當發生與用戶(id = 2)相關的其他事件(eventid = 3)時,服務器本身發送GET請求以發送/發送?id = 2 & eventid = 3。 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調用不加載,此時服務器返回與事件ID的響應。客戶端使用此eventid進行不同的AJAX調用(無關,因爲我使用Django作爲主應用程序,但Node.js用於事件驅動的超能力)。

我只是爲更多用戶連接創建「event2」,「event454」等衆多偵聽器而煩惱。這是否可以像Node.js一樣進行擴展?我怎麼能發出用戶特定的事件?

在此先感謝!

回答

0

您可以使用removeAllListeners發出事件後刪除偵聽器。