7

これを行う Comet サーバー テクノロジがあることは知っていますが、簡単で自家製のものを書きたいと思います。

レコードが MySQL テーブルに挿入されると、このデータを、PHP (またはその他のもの) を使用して一連のロング ポーリング Apache 接続に何らかの方法で伝達したいと考えています。そのため、複数の人がブラウザを介して「リッスン」しており、MySQL INSERT が 2 番目に発生すると、ブラウザに送信されて実行されます。

簡単な方法は、PHP スクリプトで MySQL データベースをポーリングすることですが、これは実際にはサーバーからのプッシュではなく、不要なデータベース クエリの許容できない順序が発生します。基本的に、リスナーがまったくクエリを実行せずに、MySQL からロングポーリング接続にそのデータを取得したいと考えています。

これを実装する方法についてのアイデアはありますか?

4

3 に答える 3

2

私はこれに対する解決策についてもあらゆる種類のアイデアを試してきましたが、SQLクエリのポーリングを行う唯一の方法は、代わりにファイルをポーリングすることです。塗りつぶしが0に等しい場合は、ループを続行します。ファイルが1に等しい場合は、ループを実行してSQLクエリを実行し、ユーザーに送信します。それは別のレベルの複雑さを追加しますが、それはmysqlによる作業が少ないことを意味すると思いますが、apacheまたはこれまでループしているデーモンについては同じです。コマンドをデーモンの「comet」スタイルに送信することもできますが、ソケットがどのように機能するかについて私が見たものから、リクエストごとにフォークしてループするので、誰かがこれに対する解決策を見つけてくれることを願っています。

于 2010-12-16T20:00:54.487 に答える
0

これは私も長年探し求めていたものです。SQL サーバーが INSERTS、DELETE、および UPDATES でメッセージをプッシュする機能は見つかりませんでした。

TRIGGERS はこれらのイベントで SQL を実行できますが、ここでは役に立ちません。

独自のシステムを構築する必要があると思います。PHP から UDP を簡単にブロードキャストできます (最初のコメントの例)。問題は、PHP がサーバー側で実行されており、クライアントが静的であることです。

私の推測では、クライアント上で Java アプレットを実行し、UDP メッセージをリッスンしてから、ページの更新をトリガーできると思います。

これは、執筆時点でのいくつかの考えにすぎません...

于 2010-12-02T17:08:25.110 に答える
0

MySQL はおそらく、この問題に適したツールではありません。Regilero は DB を切り替えることを提案しましたが、より簡単な解決策は、pub/sub 機能を持つ redis のようなものを使用することです。

http://redis.io/topics/pubsub

于 2011-08-23T17:35:16.157 に答える