如何使用Jetty Java打开多个WebSocket

如何使用Jetty Java打开多个WebSocket,websocket,jetty,embedded-jetty,jetty-9,java-websocket,Websocket,Jetty,Embedded Jetty,Jetty 9,Java Websocket,我正在使用org.eclipse.jetty.websocketclient,我想打开多个指向不同URL的web套接字。 我在用Java 我需要怎么做? 我想在多个线程中打开web套接字。 1.是否需要为每个连接创建websocketclient? 2.我可以使用任何websocketclient工厂吗?有吗? 3.我是否只需要打开一个websocketclient,让它保持打开状态,然后用它打开web套接字? 4.创建多个websocket客户端有什么问题?这个答案涉及Jetty 9 webs

我正在使用org.eclipse.jetty.websocketclient,我想打开多个指向不同URL的web套接字。 我在用Java

我需要怎么做? 我想在多个线程中打开web套接字。 1.是否需要为每个连接创建websocketclient? 2.我可以使用任何websocketclient工厂吗?有吗? 3.我是否只需要打开一个websocketclient,让它保持打开状态,然后用它打开web套接字?
4.创建多个websocket客户端有什么问题?

这个答案涉及Jetty 9 websocket

您有1个
WebSocketClient
,可以将其视为一个浏览器,每次调用
connect()
都会建立一个新的连接

connect()
的每次调用都应该有一个新的WebSocket实例,每个实例都将由WebSocket客户端的
执行器管理,这本质上会导致每个WebSocket实例位于其自己的线程上

后续答案

理想情况下,只有一个WebSocketClient,并且只启动一次。在有活动websocket连接的时间段内保持启动状态。 没有更多连接时停止WebSocketClient

一般来说,除非您知道自己在做什么,否则避免对多个请求重用对象。示例:ClientUpgradeRequest和URI与WebSocket会话相关联,如果在多个连接中重用该会话,则在第一个连接关闭时会发生状态更改,从而使数据对其他连接无效,还有垃圾收集引用,在所有连接关闭之前,清理旧连接很困难

您可以同时调用
connect()
,去做吧。每个连接尝试都基于执行器行为进行处理(例如:如果您有一个单线程执行器,那么一次只发生一个连接)


为每个连接创建一个新的WebSocketClient过度浪费资源。这就像为每个传入请求启动整个Web服务器一样。WebSocketClient管理选择器、线程、会话跟踪等。我知道您来自何方,较旧的http客户端库具有这种行为,但由于spdy和http/2,即使是这些http客户端也在更新自己以适应这种新的浏览器模式。

Ok thx。那么,我是否只需要启动和停止WebSocketClient一次,并在每次需要与不同的websocket对话时调用connect?是否需要为每个连接创建新的ClientUpgradeRequest、URI和WebSocketListener?我可以同时使用2个WebSocket连接到URI吗?如果我为每个websocket创建WebSocketClient会发生什么?Thx Joakim。这就是我要找的。我将让WebSocketClient保持启动状态,并为每个连接创建ClientUpgradeRequest、URI和WebSocketListener。