【问题标题】:How to open multiple websockets with Jetty Java如何使用 Jetty Java 打开多个 websocket
【发布时间】:2015-03-02 20:01:59
【问题描述】:

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

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

【问题讨论】:

    标签: websocket jetty embedded-jetty jetty-9 java-websocket


    【解决方案1】:

    这个答案谈到了 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.

    【讨论】:

    • 好的,谢谢。那么我是否只需要启动和停止 WebSocketClient 一次并在每次我想与不同的 websocket 交谈时调用 connect ?我是否需要为每个连接创建一个新的 ClientUpgradeRequest、URI 和 WebSocketListener?我可以同时使用 2 个 websocket 连接到 URI 吗?如果我为每个 websocket 创建 WebSocketClient 会发生什么?
    • 谢谢乔金姆。这就是我一直在寻找的。我将让 WebSocketClient 保持启动状态,并为每个连接创建 ClientUpgradeRequest、URI 和 WebSocketListener。
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多