java - Java Web 应用程序和 Web 服务之间的线程间通信

标签 java multithreading web-services jax-ws

我在 inter-thread communication between java application and jax-ws web service 中发布的原始问题的一些前提发生了变化(我也在简化问题以使其更容易理解(并因此得到回答)......希望版主没问题。)

Web 服务线程 (THREAD-1) 向套接字发出请求并进入休眠状态等待响应。另一个监听器线程 (THREAD-2)(作为单独的 Web 应用程序运行,一旦它收到响应)必须将 THREAD-1 从 sleep 中唤醒。

我该怎么做(以推送通知的方式)?

他们都可以访问数据库表。 THREAD-1 可以在进入 hibernate 状态之前将其唯一标识放入表中。 THREAD-2,一旦收到响应并确定它属于 THREAD-1,它就会更新数据库表中的相应行。现在 THREAD-1 可以对数据库表进行轮询(定期)以检查响应是否已到达。

但我希望以推送通知的方式进行。当响应到达时,THREAD-1 应该立即得到通知,而不必每隔几秒轮询一次。

最佳答案

如果您的后端请求快速完成并且您没有大量的客户端请求要处理,您可以让网络服务等待通过它刚打开的同一个套接字的响应。它可以阻止等待读取响应。

但是,如果您可以访问 Servlet 3.0(例如 Tomcat 7),则可以使用 asynchronous HTTP requests .它允许您在不响应客户端请求的情况下将处理 Web 服务客户端的线程释放回池中。当来自后端服务的响应消息到达时,从 servlet 容器中获取适当的 Web 服务客户端请求,并将最终响应发送回 Web 服务客户端。

关于java - Java Web 应用程序和 Web 服务之间的线程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485827/

相关文章:

java - 如何保持FirebaseDatabase连接始终在线?至少几个小时

java - java GC是递归执行的吗?

java - Java 电梯模拟器中的通知

mysql - 使用python中的线程在Mysql上同时运行多个查询

java - 如何获取系统中的方面列表

c# - 有没有办法在 Visual Studio 2012 中将文件夹转换为项目?

java - Tomcat、JAX-WS、Hibernate——缺陷和解决方案?

java - 何时需要以及何时不需要手动将更新保存到 JPA 实体

java - Hibernate 左外连接

c++ - 线程完成后删除Qt Thread中的对象