Java Web Socket ServerEndpoint线程安全

时间:2016-03-16 22:35:48

标签: concurrency websocket java-ee-7

单个ServerEndpoints线程是安全的还是属于在给定时间与它们交互的所有客户端?

或者提出同样问题的另一种方式: ServerEndpoint类中的全局对象是否存在创建并发问题的危险,like they do in HttpServlets

This example似乎表明每个端点都是线程安全的,或者他只是使用Set并祈祷并发问题不会弹出?

因此,假设它们是线程安全的,那么每次建立来自不同客户端的新连接时,容器(Tomcat,Glassfish等)是否都会创建ServerEndpoint类的新实例?

1 个答案:

答案 0 :(得分:1)

默认情况下,每个客户端连接都会创建新的@ServerEndpoint实例。 (这似乎也是最后一个问题的答案)。

静态对象(或访问它们)必须同步。

链接示例使用synchronizedSet,所以看起来没问题。

此外 - 在前一个@OnMessage处理结束之前不会触发@OnMessage方法,但是可以从不同的线程调用它。这意味着您将始终按顺序处理传入的消息。