2015-03-02 47 views
0

我使用的是org.eclipse.jetty.websocketclient,我想打開多個web套接字到不同的URL。 我正在使用Java。如何用Jetty打開多個websocket Java

我該如何做? 我想打開多個線程中的網絡套接字。 1.我是否需要爲每個連接創建websocketclient? 2.我可以使用任何websocket客戶端工廠嗎?有沒有? 3.我是否需要打開一個websocketclient,保持它打開並以某種方式打開web套接字? 4.創建多個websocket客戶端有什麼問題?

回答

2

這個答案是關於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。

+0

好的thx。那麼,我是否需要僅啓動和停止WebSocketClient一次,並在每次想要與不同的WebSocket進行通信時調用connect?我是否需要爲每個連接創建一個新的ClientUpgradeRequest,URI和WebSocketListener?我可以同時使用2個websocket連接到URI嗎?如果我將爲每個websocket創建WebSocketClient,會發生什麼? – user2445225 2015-03-03 06:56:26

+0

Thx Joakim。這是我正在尋找的。我將離開WebSocketClient啓動併爲每個連接創建ClientUpgradeRequest,URI和WebSocketListener。 – user2445225 2015-03-03 18:55:13