我在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上的主题,但没有解决方案......
更新
事实证明请求是并行运行的。事情"序列化"我的请求是所有请求之间共享的数据库连接......