我的 Java 应用程序需要从服务器获取数据(在 nginx 上运行 CakePHP)。有没有其他方法可以在不轮询服务器的情况下获取数据?目前,我正在使用持久的 HTTP 连接并每隔 X 秒轮询一次服务器,以查看是否有任何数据可用。
如果它是一个网络浏览器,我可以使用网络套接字。我们在 Java 中有哪些选择?
我的 Java 应用程序需要从服务器获取数据(在 nginx 上运行 CakePHP)。有没有其他方法可以在不轮询服务器的情况下获取数据?目前,我正在使用持久的 HTTP 连接并每隔 X 秒轮询一次服务器,以查看是否有任何数据可用。
如果它是一个网络浏览器,我可以使用网络套接字。我们在 Java 中有哪些选择?
如果您可以实现某种 Java 消息系统 (JMS),例如 ActiveMQ、RabbitMQ、WebsphereMQ 等,那么您可以监听发布到客户端的消息。当然,您的 Java 应用程序仍然有效地轮询消息,但性能会比 HTTP 请求好得多。
Spring 框架在 JMS 实现上提供了一些出色的抽象,因此您不必担心管道问题。您可以使用简单的JmsTemplate或使用Spring Integration作为两个选项
WebSphereMQ 的遥测功能允许 MQTT 客户端连接到 MQTT 通道。在您的服务器上运行的 MQTT 应用程序可以在数据更改时发布数据,并将数据推送到已订阅相应主题的远程 JMS 或 MQTT 客户端。不涉及轮询。
您的应用程序中的数据是否经常更改?如果是这样,轮询可能是获取更新的最佳且最简单的方式。
如果没有,您将不得不自己构建 Web 套接字功能 - 在您的 Java 客户端中有一个“服务器”来侦听某个端口。当你提交一个请求时,让 CakePHP 记录它,并有一个 cron 作业或类似的工作,它会在数据更新时向你发送数据。
但是,如果您在防火墙/NAT 后面,这将很难工作。您可以尝试一下,但我认为轮询 HTTP 服务器将是最简单的。