2017-04-30 14 views
1

私はAngularJS(フロントエンド)とPHP/MySQL(バックエンド)を使ってWebアプリケーションを構築しました。AngularJSとMySQLのリアルタイム通信

MySQLデータベース(Node.jsなし)を "監視"する方法があるのか​​どうか疑問に思っていたので、あるユーザーがデータを追加すると、その変更も他のユーザーにも同期されます。

など。私はFirebaseがそれをしていることは知っていますが、オブジェクト指向のデータベースであり、SQLのように高度なクエリを実行できません。

私は$interval$httpを使用し、ajaxリクエストを行うことを考えていましたので、データベースの変更を検出することができました。これは可能ですが、毎日サーバーに何千ものHTTPリクエストを行い、さらに各リクエストでPHPを解釈します。

私は不可能ではないと信じています。これを行うにはアイデアが必要です。私は持っていないので、ここで助けを求めています。

+0

Ajaxロングポーリングの使用はどうですか?実際には「リアルタイム」ではありませんが、まあまあまあまあですね。少なくとも私の頭の中に突っ込んだ。あなたのアプリケーションには適していないかもしれませんが、わかりません。 – Dennis1679

答えて

0

「リアルタイム通信」のフォームを希望する場合は、クライアントからの長いポーリングのフォームを組み込む必要があります。 Webソケットを使用していない限り、それはさまざまなことについての大きなポストです。あなたはDBの帯域幅と需要について心配するのは当然です。

Webソケットに関する経験がない場合は、イベントを別のテーブル/ビューに記録し、pub/subメソッドを使用してエンティティをイベントに登録し、そのイベントをテーブルにブロードキャストします。その後、変更が発生した可能性があるかどうかを確認するためにウォッチャービューに対して長時間ポーリングします。ある場合は、正確な値を照会します。

もう1つのオプションは、メッセージを保持する "deciders"を持つクエリシステムを使用することです。これがどのように機能するかについてのより良い説明のためにAmazonのSQSプラットフォームを見てください。基本的には、メッセージを保持するキューがあり、デシリアントは、(実行時間を短縮するために)いくつかのハッシュまたはソート方法を使用してメッセージを格納する場所を選択します。クライアントが更新を要求すると、判定者はハッシュ/ソートに基づいて適用されるメッセージを見つけて返します。次に、メッセージをいつどのように破壊するかを決めるだけです。

2番目のオプションでは、さらに微妙な調整が必要になるため、実際にはあなたの好みです。私はあなたが難しいと感じるものは、ほとんどのソリューションはメッセージが1回以上配信されなければならないという事実に対処しなければならず、誰かがメッセージを受信したときを追跡する必要があり、キュー/イベントテーブルから削除されたか、またはまだ待つ必要があるかどうかを確認します。それ以外の場合は、多くのメモリを消費します。

関連する問題