1

我正在使用 org.eclipse.jetty.websocketclient 并且我想打开多个 Web 套接字到不同的 URL。我正在使用 Java。

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

4

1 回答 1

2

这个答案谈到了 Jetty 9 WebSockets。

你有 1 WebSocketClient,把它想象成一个浏览器,每次调用都connect()建立一个新的连接。

每个调用都connect()应该有一个新的 WebSocket 实例,每个实例都将由 WebSocketClient 管理,Executor从而导致每个 websocket 实例本质上都在自己的线程上。

后续答案

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

一般来说,避免为多个请求重用对象,除非您知道自己在做什么。示例:ClientUpgradeRequest 和 URI,与 WebSocket Session 相关联,如果跨多个连接重用,将在第一个连接关闭时发生状态更改,使其他连接的数据无效,然后还有垃圾收集引用这使得清理旧连接变得困难,直到所有连接都关闭。

你可以connect()同时打电话,去吧。每次连接尝试都基于 Executor 行为进行处理(例如:如果您有一个单线程 Executor,那么一次只发生 1 个连接)

为每个连接创建一个新的 WebSocketClient 会过度浪费资源。这就像为每个传入请求启动整个 WebServer。WebSocketClient 管理选择器、线程、会话跟踪等。我知道你来自哪里,旧的 http 客户端库有这种行为,但即使是那些 http 客户端也正在更新自己到这个新的浏览器模型,这要归功于 spdy 和 http /2。

于 2015-03-02T22:05:18.917 回答