Pav*_*l_K 4 multithreading websocket tyrus jakarta-ee
我使用 GF 4 作为 JavaEE 服务器。
这就是我对 servlet 处理的理解:有一个线程池,当请求到来时,这个池中的一个线程被用来处理请求。之后,线程被放回池中。
根据上面的信息,我想(我不确定)websockets(服务器端点)是这样处理的:有线程池,当
这一切都意味着 ServerEndpoint 的每个方法都可以由不同的线程执行。我的理解对吗?
是的。
该ServerEndpoint
实例所在,只要相关的WebSocket会话可作为Session
期间参数@OnOpen
。在该 WebSocket 会话期间,可能会触发许多 HTTP 和 WebSocket 请求。每个这样的请求都作为一个单独的线程。
换句话说,如果您的ServerEndpoint
类由于某种原因需要在多个方法中处理实例变量,则必须以线程安全的方式实现。根据具体的功能需求,您可能更好地使用Session#getUserProperties()
来携带与 WS 会话关联的状态(将其视为会话属性)。
应该注意的是,这一切都与使用的容器和 WS 实现无关。