2015-03-02 68 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