2017-04-14 60 views
0

朋友我打算計劃一個像Skype這樣的應用程序。我對一個套接字連接上的多個房間幾乎沒有擔憂。像Skype應用程序上的問題

假設我有200個朋友在線。在鳳凰插座,當一個人加入一個房間,他將能夠發送和收到的所有消息(由其他用戶在同一個房間發送)

我的問題是在這scnaioro。

  • 我與我的朋友聊天「A」

  • 「自己」和「A」兩個連接的房間「1」,我們都被髮送和接收成功的消息。

  • 我的另一位朋友「B」發送我的消息,我也不會加入房間:2呢。我不會收到來自「B」的警報和通知。

  • 我的問題是,我該怎麼做。我應該根據我的在線朋友列表同時加入多個房間嗎?在這種情況下,很多房間將由我和其他朋友加入。是否有任何性能問題。因爲也許我的在線朋友數量可能會超過200到400.並且,當任何朋友成爲在線或離線時,我也需要我自己連續不斷地離開房間。

  • 另一種情況是,我應該只保留一個與聊天的名字空間。我應該寫一個包含我的邏輯的SubChaneel模塊。每條消息將與子通道參數一起廣播。我的javascript和ui將控制哪個消息屬於哪個用戶(朋友)的房間。主動聊天(朋友)將被追加,而不是主動(在線)用戶將被追加到他們隱藏的UI元素中。

回答

0

我已經回答了非常類似的問題How to keep a user subscribed to every chatPhoenix Channels - Multiple channels per socket。總之,我會爲每個打開的聊天會話設置一個用戶頻道和一個房間/頻道。使用聊天頻道廣播消息和用戶頻道,以便爲跟蹤當前訂閱的用戶界面部分的每個頻道推送更新。

在我的聊天應用程序,如果有人@mentions有人在那個房間裏沒有簽約,我自動創建的那個人訂閱並將其添加到自己的UI訂閱列表。

如果用戶沒有打開聊天會話,我不會爲某個房間推送消息。但是,我確實會通過用戶頻道推送提醒(用於@提及直接消息)和未讀消息通知。

我的應用程序有一個聊天窗口布局(類似於Slack)。現在,如果有人在兩個窗口之間切換,我每次都會重新載入消息。但是,每次加載房間需要幾秒鐘的時間。我要修改我的設計,以便當用戶更換房間時,我將舊房間保存在客戶端中。這樣我就可以重新加載客戶端中的空間而不必返回服務器。但是,我需要保持多個房間頻道的打開狀態,並處理未打開主動聊天室的傳入消息。