如何并行处理websocket请求?

时间:2015-08-07 14:38:21

标签: java multithreading parallel-processing websocket

我在glassfish上的java中有一个标准的websocket-endpoint构建。如果我向它发送一个asyncronus长时间运行的请求,直接跟一个独立的快速运行的第二个请求,第二个请求就不会运行,直到第一个请求结束。

为了解决这个问题,我为每个进入请求分叉了一个线程:

@ApplicationScoped
@ServerEndpoint(value = "/mysocket")
public class my_WebSocket {
  @OnMessage
  public void onMessage(Session session) {
    Thread t = new Thread(){
      @Override
      public void run() {
        try{
          doWork(session);
        }catch(Exception e){e.printStackTrace();}
      }
    };
    t.start();
  }
  // ...
}

根据我的应用程序行为和日志文件输出,请求现在并行处理。不幸的是,这些解决方案的整体运行时间(完全)与没有线程的原始版本相同。对我来说,这是一个指示,内部的请求仍然是串行处理。

问题:

如何配置glassfish以正确处理线程?因为我发现一些在后端使用Threads的帖子被认为是" bad":有没有更好的解决方案来并行处理来自一个客户端的websocket的不同请求?

This question讨论了Tomcat上的主题,但没有解决方案......

更新

事实证明请求是并行运行的。事情"序列化"我的请求是所有请求之间共享的数据库连接......

0 个答案:

没有答案