這個答案是關於Jetty 9 WebSockets的。
你有1 WebSocketClient
,把它當作瀏覽器,每次調用connect()
建立一個新的連接。
每次調用connect()
都應該有一個新的WebSocket實例,每個實例將由WebSocketClient的Executor
管理,實質上導致每個websocket實例都在它自己的線程上。
跟帖回答
理想的情況下,只有1 WebSocketClient,並啓動它只有一次。讓它在有活動websocket連接的時間段開始。 當沒有更多連接時停止WebSocketClient。
一般來說,避免重複使用對象的多個請求,除非你知道你在做什麼。例如:ClientUpgradeRequest和URI與WebSocket會話相關聯,如果跨多個連接重用,則會在第一個連接關閉時發生狀態更改,使其他連接的數據無效,然後還會有Garbage集合引用在所有連接關閉之前,清理舊連接變得困難。
您可以同時撥打connect()
,去找它。每個連接嘗試都基於Executor行爲進行處理(例如:如果您有一個線程執行程序,則一次只能發生1次連接)
爲每個連接創建一個新的WebSocketClient過度浪費資源。這將像爲每個傳入請求啓動整個WebServer一樣。一個WebSocketClient管理選擇器,線程,會話跟蹤等等。我知道你來自哪裏,老版本的http客戶端庫有這種行爲,但即使這些http客戶端正在更新自己到這個新的瀏覽器 - ish模型感謝spdy和http/2。
好的thx。那麼,我是否需要僅啓動和停止WebSocketClient一次,並在每次想要與不同的WebSocket進行通信時調用connect?我是否需要爲每個連接創建一個新的ClientUpgradeRequest,URI和WebSocketListener?我可以同時使用2個websocket連接到URI嗎?如果我將爲每個websocket創建WebSocketClient,會發生什麼? – user2445225 2015-03-03 06:56:26
Thx Joakim。這是我正在尋找的。我將離開WebSocketClient啓動併爲每個連接創建ClientUpgradeRequest,URI和WebSocketListener。 – user2445225 2015-03-03 18:55:13