[英]Best practice for handling Socket.io events?
我正在從 ajax 輪詢切換到 socket.io 實時數據推送,但對管理事件的最佳實踐有疑問。
假設我有一個這樣的基本服務器:
var Clients = [];
// Event fired every time a new client connects:
io.on('connection', function(socket) {
Clients.push(socket);
// What else should go in here?
// Individual functions for each event?
socket.on('chat message', function(msg){
console.log(':> '+msg);
io.emit('chat message', msg);
});
// When socket disconnects, remove it from the list:
socket.on('disconnect', function() {
var index = Clients.indexOf(socket);
if (index != -1) { Clients.splice(index, 1); }
});
});
在示例中,有一個chat message
事件,但理想情況下還有許多其他事件我想實時推送給客戶端,例如:
用戶發送消息,用戶開始/停止輸入,用戶喜歡帖子,用戶邀請您成為朋友/群組成員等等。
我想實時捕獲許多事件,但似乎必須有比io.on()
語句更好的方法。
我已經研究過 Node OOP,但不確定它是否對這個應用程序有幫助。
那么在我們有socket.on()
語句的地方,像我描述的那樣包含事件捕獲的最佳實踐是什么?
我想實時捕獲許多事件,但似乎必須有比塞滿 io.on() 語句更好的方法。
不。 在io.on('connection', ...)
中,您有一個閉包,其中包含與新連接相關的socket
變量。 因此,您想要從該套接字響應的任何事件處理程序都進入那里或在您從那里調用並將套接字傳遞到的某些函數中。 這就是它的工作原理。
僅供參考,為了模塊化,您不必將所有事件處理程序放在一個io.on('connection', ...)
。 如果將io
對象導出到其他模塊或在模塊構造函數中將其傳遞給它們,則可以讓其他模塊創建自己的io.on('connection', ...)
偵聽器並在自己的io.on('connection', ...)
安裝自己的事件處理程序io.on('connection', ...)
。 io
是一個 EventEmitter,因此它可以根據需要支持盡可能多的connection
事件偵聽器,並且所有偵聽器都會收到通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.