私は現在、潜在的に低帯域幅の環境で一定の AJAX リクエストの必要性を減らす/削除するために、WebSocket を試しています。すべてのデバイスは WebSocket に準拠しているため、問題はありません。node.js やその他のフレームワーク / ライブラリを使用せずに、ネイティブ PHP WebSocket に維持しようとしています (これまでのところ問題ありません)。
私がやろうとしているのは、別のクライアントによるデータベースへの更新について、接続されたクライアントに通知する方法を決定することです。問題のユースケースは、デバイスのボタンを押す人であり、そのボタンが押されたことをその人のマネージャーに警告します。したがって、私が持っている2つのオプションは次のとおりです。
1. データベース クエリのループ (PHP)
私が最初に考えたのは、「アラート フィールドが変更されましたか? その場合はマネージャーに通知する」という効果的なクエリを WebSocket サーバーに挿入することでした。これは(私が考えることができる)最も簡単で賢明なアプローチですが、毎秒クエリを実行しているサーバーの負荷を軽減するように設計された PHP スクリプトを使用するのは無駄に思えますが、少なくともこれにより、データベースの更新が検出されると、更新が送信されます。
2. クライアントからの通知の送信
私が考えていたもう 1 つの考えは、クライアントがデータベースを更新するときに、実際には WebSocket 通知を自分で送信できるということでした。これには、集中的でループするクエリを減らすという利点がありますが、次のようなデータを変更するたびに、WebSocket メッセージを送信する必要があることも意味します。
$.post("AttemptDatabaseUpdate.php", {Data}).function(Result) // Don't worry about the semantics of this, it's not actual code
{
if(Result == "Successful")
{
SendWebSocketNotification(OtherData);
}
}
おそらくこれが最も効率的であるため、これが最良のオプションですが、データベースの更新と WebSocket 通知の送信の間に接続が切断される可能性があり、PHP ファイルでフォールバック チェックが必要になる可能性があるのではないかと心配しています。 、より長い間隔ではありますが(30秒ごとに言ってください)、最初のソリューションのものとよく似ています。
3.MySQL トリガー?
これは単なる推測ですが、おそらく別のオプションは、server.php ファイルに直接通知できる MySQL トリガーを作成することですか? これがどのように機能するかはわかりませんが、これが解決策 1 と同じまたは類似のクエリ要件になる可能性があると推測する危険がありますが、それはただのことです...
よろしくお願いします:)
編集: 解決策の可能性 4
実際、別の考えが頭に浮かびました。データベースの更新に使用される PHP ファイルには、実際には WebSocket メッセージが組み込まれている可能性があります。PHPファイルがデータベースを更新すると、WebSocketサーバーはPHP経由で通知されますが、これは可能ですか?