2011-01-29 8 views
7

私はいつも長いポーリングという考えを楽しんできました。私の開発サーバーでは、さまざまな通知/新しいポストシステムを使っていました。それぞれ、javascriptを使用して接続を保持し、何らかの応答を待っています。私はいつもこれの多くの実装で問題を抱えていました。それらはすべて、新しい行をチェックするためにmySQLサーバーを繰り返しポーリングします。PHPの長いポーリング、過度のデータベースアクセスなし

長いポーリングリクエスト専用のサーバーが考えられますが、すべてのクライアントのデータベースサーバーを連続してポーリングすることは非常に無駄です。それは比較的重要でない何かのためのリソースの莫大な無駄です。

バッターの方法はありますか?

答えて

4

データベースを介してイベントを通知したくないという特定の問題がある場合は、おそらく共有メモリまたはセマフォを使用してください。

代わりにデータベースを連続的にポーリングする代わりに、共有メモリを監視します。何かがdbに書き込むとき(私は何らかのメッセージキューを想定しています)、共有メモリを介してイベントにフラグを立てることができます。リスニングコードはこれを検出してから、db接続を確立してメッセージを取得します。また、共有メモリを使用してデータベースの使用を完全に置き換えることもできます。

PHPのセマフォと共有メモリ機能のための参照はここにある - http://uk.php.net/manual/en/ref.sem.php

0

WebSockets

...

それは実際に完全にサポートされます。)

+0

サーバーのポーリングは問題ではなく、サーバー側でのデータの格納と取得です。 – Harold

+0

それから私は間違いなくseppo0010の提案に行きます。それは私がちょうど質問を一瞥するために得るものだと思う;) –

+0

とにかくサポートありがとう! – Harold

5

私は、新しいデータがある通知するいくつかのNoSQLを使用します。 Redisは、pub/subおよびblocking listを有する。

たとえば、memcacheを使用して、データが利用可能なときに新しいキーを作成することもできます。

+0

それは実際には素晴らしい考えです。私が開発したアプリケーションの多くは恩恵を受けることができないので、私はmemcacheについて完全に忘れてしまった。 Memcacheから変数を読み込むことは、確かに速くなるでしょう。ありがとう! – Harold

+0

例を挙げてください。私はそれを使用したことはありませんありがとう。 – moderns

0

データ・キャッシュは、私はそれが劇的にソケットを使用して、サーバーとの常時接続を維持し、バックグラウンドでのフラッシュムービーを持つに見ることができるデータベース

-1

から引っ張って減少し、Zendのサーバーからの1が好きです。 Javaもソケットをサポートしているので、ページに埋め込まれたJavaアプレットでもあります。

+0

私は尋ねたものとは関係がありません。 – Harold

0

あなたが挿入するか、データベースがデータベースのそのフィールドのキャッシュを作成して更新した場合。シンプルなPHPベースのキャッシュ(http://hycus.com/2011/03/31/hcache-a-cache-system-for-php/)を使用することができます。

次に、JQUERYを使用してそのキャッシュを連続的にポーリングできます。

関連する問題