現在、REST API で Web アプリケーション (LAMP スタック) を使用して、クライアント (Python デスクトップ アプリケーション) と通信しています。
クライアントはサーバーに登録し、REST API を介して状態をサーバーに送信できます。
ここで、Web アプリケーション (サーバー) から選択したクライアントに通知をプッシュする必要があります。
私の質問は、サーバー (php) からプッシュ通知を送信し、クライアント (python) からそれを読み取る方法です。
これには多くの方法がありますが、ほとんどの場合、サーバーとクライアントの間である種の持続的な接続が必要になります。
デスクトップ クライアントが HTTP 経由で通信する場合は、Server Sent Events、websocketsを使用するか、ロング ポーリングを実装して通知をプッシュすることができます。
プッシュ通知を提供するサードパーティのサービスを使用することもできます。
したがって、基本的には、一定の間隔でクライアントからサーバーにクエリを実行し、(interval ~ 0 == realtime)ニュースがあるかどうかを尋ねることができます。
通常、apache はスレッド/フォーク リクエスト処理モデルのため、長時間待機する接続を処理できません。
nginx はソケットの多重化 (select/epoll/kqueue) を使用しているため、nginx への切り替えを試すことができます。これにより、多くの同時待機接続を処理できます)。
または、node.js について考えて、php アプリをそれに置き換えることもできます。これは、この目的のために完全に行われます。
素敵な解決策が多すぎますweb framework/language + redis pub/sub functionality + node.js。通常は Web アプリケーションをリクエストできますが、node.js サーバーへの接続がオープンすぎると、node.js サーバーは必要に応じてクライアントに通知します。一部のクライアントに通知することについて node.js に伝えたい場合は、web アプリから redis pub/sub を介して行うことができます。