这个答案是关于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。
好的thx。那么,我是否需要仅启动和停止WebSocketClient一次,并在每次想要与不同的WebSocket进行通信时调用connect?我是否需要为每个连接创建一个新的ClientUpgradeRequest,URI和WebSocketListener?我可以同时使用2个websocket连接到URI吗?如果我将为每个websocket创建WebSocketClient,会发生什么? – user2445225 2015-03-03 06:56:26
Thx Joakim。这是我正在寻找的。我将离开WebSocketClient启动并为每个连接创建ClientUpgradeRequest,URI和WebSocketListener。 – user2445225 2015-03-03 18:55:13