我正在使用org.eclipse.jetty.websocketclient,我想打开多个Web套接字到不同的URL。 我正在使用Java。
我该怎么做呢? 我想在多个线程中打开Web套接字。 1.我是否需要为每个连接创建websocketclient? 2.我可以使用任何websocketclient工厂吗?有没有? 3.我是否只需打开一个websocketclient,保持打开并以某种方式打开网络套接字? 4.创建多个websocket客户端有什么问题?
答案 0 :(得分:2)
这个答案谈到了Jetty 9 WebSockets。
您有1 WebSocketClient
,将其视为浏览器,每次调用connect()
建立新连接。
每次调用connect()
都应该有一个新的WebSocket实例,每个实例都将由WebSocketClient的Executor
管理,从而导致每个websocket实例都在自己的线程上。
跟进答案
理想情况下,只有一个WebSocketClient,并且只启动一次。让它在有活动的websocket连接的时间段内启动。 当没有更多连接时停止WebSocketClient。
一般来说,除非您知道自己在做什么,否则请避免为多个请求重复使用对象。示例:ClientUpgradeRequest和URI与WebSocket会话相关联,如果在多个连接中重用,将在第一个连接关闭时进行状态更改,使得数据对其他连接无效,然后还有垃圾收集引用这使得清理旧连接变得困难,直到所有连接都关闭。
你可以同时打电话给connect()
,去吧。每个连接尝试都基于Executor行为进行处理(例如:如果您有一个单线程Executor,那么一次只发生一次连接)
为每个连接创建一个新的WebSocketClient过度浪费资源。这就像为每个传入请求启动整个WebServer。 WebSocketClient管理选择器,线程,会话跟踪等。我意识到你来自哪里,旧的http客户端库有这种行为,但即使那些http客户端也正在通过spdy和http更新到这个新的浏览器模型/ 2。