2014-03-30 79 views
0

假設我有一組不同的房間(「足球」,「籃球」,「網球」......)和一組房間在使用Socket.IO的Node.js應用程序中,城市(「巴黎」,「倫敦」,「柏林」...)的編號爲僅將事件發送給與Socket.io房間組合的客戶

是否有可能只向那些對倫敦感興趣的人發送和活動? 類似於:

io.sockets.in('london').in('football').emit('event_name', data); 

還是設計不好?

在此先感謝。

回答

1

您可以在許多方面

  • 你可以有房解決這個問題,你想,如果你的應用程序使用的路線像/london還是要聽發出的

    io.sockets.in('london').emit('football',/* data */)

  • 命名空間football事件/london/football

    你可以這樣做io.of('/london').in('football').emit('update',/* data */說,在路線/london在房間football發出update事件。它在我看來稍微快一點,因爲它不會將一個房間中的許多用戶分組,而是使用名稱空間來解決排放事件。

  • 房間按城市和興趣。
    io.sockets.in('london:football')這是一個特定的城市和體育的房間。
    這個房間裏的每個人都可以獲得有關足球運動的更新。

+0

第一個選項會產生大量不必要的流量,這是我試圖避免的與房間。 第二個,我不確定我是否可以使用它。據我所知,每個客戶端只能同時在一個命名空間中,對嗎? 第三個選項是我已經想到的,如果我找不到更好的解決方案,可能會做,但在我的情況下,我必須做很多組合。在應用程序中維護很多房間是否很昂貴? 謝謝。 –

+0

我會將其標記爲已接受,因爲我會爲第三個選項做準備。 –