私のJavaアプリケーションはサーバーからデータをフェッチする必要があります(nginxでCakePHPを実行しています)。サーバーをポーリングせずにデータをフェッチする別の方法はありますか?現在、永続的なHTTP接続とポーリングサーバーをX秒ごとに使用して、データが利用可能かどうかを確認しています。
Webブラウザーであれば、Webソケットを使用できたはずです。Javaにはどのようなオプションがありますか?
私のJavaアプリケーションはサーバーからデータをフェッチする必要があります(nginxでCakePHPを実行しています)。サーバーをポーリングせずにデータをフェッチする別の方法はありますか?現在、永続的なHTTP接続とポーリングサーバーをX秒ごとに使用して、データが利用可能かどうかを確認しています。
Webブラウザーであれば、Webソケットを使用できたはずです。Javaにはどのようなオプションがありますか?
アプリケーションのデータは頻繁に変更されますか?もしそうなら、ポーリングは更新を取得するための最良の、そして最も簡単な方法かもしれません。
そうでない場合は、Webソケット機能を自分で構築する必要があります。Javaクライアントに特定のポートをリッスンする「サーバー」を用意します。リクエストを送信するときは、CakePHPにログを記録させ、更新されるたびにデータを送信するcronジョブなどを用意します。
ただし、ファイアウォール/ NATの背後にいる場合、これを機能させるのは困難です。試してみることができますが、HTTPサーバーのポーリングが最も簡単だと思います。
ActiveMQ、RabbitMQ、WebsphereMQなどのようなJavaメッセージングシステム(JMS)を実装できる場合は、クライアントに投稿されたメッセージをリッスンできます。もちろん、Javaアプリケーションは依然として効果的にメッセージをポーリングしますが、パフォーマンスはHTTP要求よりもはるかに優れています。
Springフレームワークは、JMS実装に対していくつかの優れた抽象化を提供するため、配管について心配する必要はありません。単純なJmsTemplateを使用するか、 SpringIntegrationを2つのオプションとして使用できます。
WebSphereMQのテレメトリ機能により、MQTTクライアントはMQTTチャネルに接続できます。サーバーで実行されているMQTTアプリは、変更に応じてデータを公開でき、データは適切なトピックにサブスクライブしているリモートJMSまたはMQTTクライアントにプッシュされます。ポーリングは含まれません。