gpt4 book ai didi

multithreading - ServerEndpoint 的每个方法是否由不同的线程执行?

转载 作者:行者123 更新时间:2023-12-04 08:26:27 25 4
gpt4 key购买 nike

我使用 GF 4 作为 JavaEE 服务器。

这就是我对 servlet 处理的理解:有一个线程池,当请求到来时,这个池中的一个线程被用来处理请求。之后,线程被放回池中。

根据上面的信息,我想(我不确定)websockets(服务器端点)是这样处理的:有线程池,当

  • 客户端创建新的 websocket,从池中取出一个线程来创建 ServerEndpoint 的新实例并执行 @OnOpen 方法。在该线程被放回池之后。
  • 客户端通过 websocket 向服务器发送消息。从池中取出线程来执行@OnMessage 方法。在该线程被放回池之后。
  • 客户端关闭 websocket - 从池中取出线程来执行 @OnClose 方法。在该线程被放回池之后。

  • 这一切都意味着 ServerEndpoint 的每个方法都可以由不同的线程执行。我的理解对吗?

    最佳答案

    是的。
    ServerEndpoint只要关联的 WebSocket session 作为 Session 可用,实例就会存在。期间的争论 @OnOpen .在该 WebSocket session 期间,可能会触发许多 HTTP 和 WebSocket 请求。每个这样的请求都作为一个单独的线程。

    换句话说,如果您的 ServerEndpoint类由于某种原因需要在多个方法中处理实例变量,它必须以线程安全的方式实现。根据具体的功能需求,您可能最好使用 Session#getUserProperties() 而是携带与 WS session 关联的状态(将其视为 session 属性)。

    应该注意的是,这一切都与使用的容器和 WS 实现无关。

    关于multithreading - ServerEndpoint 的每个方法是否由不同的线程执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194646/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com