单个ServerEndpoints线程是安全的还是属于在给定时间与它们交互的所有客户端?
或者提出同样问题的另一种方式: ServerEndpoint类中的全局对象是否存在创建并发问题的危险,like they do in HttpServlets?
This example似乎表明每个端点都是线程安全的,或者他只是使用Set并祈祷并发问题不会弹出?
因此,假设它们是线程安全的,那么每次建立来自不同客户端的新连接时,容器(Tomcat,Glassfish等)是否都会创建ServerEndpoint类的新实例?
答案 0 :(得分:1)
默认情况下,每个客户端连接都会创建新的@ServerEndpoint
实例。 (这似乎也是最后一个问题的答案)。
静态对象(或访问它们)必须同步。
链接示例使用synchronizedSet
,所以看起来没问题。
此外 - 在前一个@OnMessage
处理结束之前不会触发@OnMessage
方法,但是可以从不同的线程调用它。这意味着您将始终按顺序处理传入的消息。