2012-02-12 172 views
33

從同一個客戶端有兩個不同的websocket連接到同一個服務器有什麼好處嗎?對我來說,這似乎是一個糟糕的設計選擇,但是有什麼理由/爲什麼它應該更好地工作?多個websocket連接

+0

REQUEST_URI是否也相同? – 2012-02-12 11:23:18

+0

@Shiplu嗯。一個人不應該通過uri傳達信息,因爲它只做一次。在這種情況下,讓我們說**是**。 – Christian 2012-02-12 18:55:35

+4

封閉選民請解釋爲什麼? **爲什麼我的問題沒有建設性?** – Christian 2012-02-12 18:55:52

回答

56

有幾個原因,你可能想這樣做,但他們可能不太常見的(至少目前還沒有):

  • 你加密和要發送未加密的數據/接收(例如,某些數據龐大但不敏感)。
  • 您既有流媒體數據又有延遲敏感數據:想象一下偶爾會在遊戲內部流式傳輸視頻的互動遊戲。您不希望大媒體流延遲收到延遲敏感的正常遊戲消息。
  • 你既有文本(例如JSON控制消息)和二進制數據(類型數組或blob),也不想打擾添加自己的協議層來區分,因爲WebSockets已經爲你做這件事。
  • 您有多個WebSocket子協議(URI後的可選設置),您支持並且頁面要訪問多個WebSocket子協議(每個WebSocket連接僅限於一個子協議)。
  • 您有幾個不同的WebSocket服務位於同一個Web服務器和端口後面。客戶端選擇每個連接的方式可能取決於URI路徑,URI方案(ws或wss),子協議,或者甚至是客戶端到服務器的第一條消息。

我確定還有其他的原因,但這些都是我能想到的。

+0

+1非常豐富! – Jonas 2012-02-13 23:26:51

0

我目前正在尋找有兩個連接到同一個websocket的解決方案。我的理由:

  • 我寫了QUnit測試用例,我想模擬多個客戶端,檢查不同客戶的正確反應
0

我發現,它可以使更簡單,當你的客戶端邏輯只是訂閱服務器管理的某些對象的更新。您可以爲每個元素打開一個套接字,而不是爲單個通道設計自定義訂閱協議。

比方說,你在

獲得通過REST API元素的集合
http://myserver/api/some-elements 

你可以使用一個插座的URL像這樣訂閱單個元素的更新:

ws://myserver/api/some-elements/42/updates 

當然之一可以爭辯說,這並不適合複雜的網頁。但是,對於小而簡單的應用,它可能會讓您的生活變得更加輕鬆。