11

私の研究

Websockets と Long Polling、それらの長所と短所などについて、Google と SO を調査するのに何時間も費やしましたが、これに対する明確な解決策をまだ見つけていません。

私は、このトピックに関する記事を、これまで調査したどの記事よりも多く読んできました。

  1. Ajax/PHP - 実行時間の長いスクリプトまたはポーリングを使用する必要がありますか?
  2. jQuery と PHP を使用したロング ポーリング
  3. データベースの変更をポーリングする - Ajax/jQuery

また、次のことも調べました。

  1. http://cometdproject.dojotoolkit.org/
  2. http://socket.io/

この質問の正当性

一見すると、この質問は重複しているか、局所的すぎるように見えるかもしれませんが、広範な調査の結果、十分な情報に基づいてどのルートを下るべきかを決定するのに十分な情報を収集できませんでした.

したがって、あなたのような天才の 1 人が、この質問に答えるために親切に時間を貸してくれ、あなたの素晴らしい知識を私たちと共有してくれることを願っています :-)

私の質問

要するに、私の質問は本当にタイトルにあります。データベース レコードへの変更を検出しようとしている場合、websocket (socket.io) とロング ポーリング (jQuery および AJAX) のどちらを使用するのが適切ですか?

答えがウェブソケットである場合は、基本的な例を含めてください。Google のすべての記事があっても、これらは私を本当に混乱させます...

さらに、これを行うためのより良い、またはより適した方法が他にもあるかもしれません。もしそうなら、それらを共有してください。


追加情報

これはおそらく最終的な回答には影響しませんが、念のため、何を検出しようとしているのか、および考慮する必要がある可能性があるいくつかのことを説明したいと思います。

事実上、ログイン セッションへの変更を検出しようとしています。つまり、データベースでユーザー トークンが変更された場合、またはタイムアウトが発生した場合、ユーザーはログアウトされており、これを通知するメッセージを表示したいと考えています。

これで違いが生じるとは思いませんが、最終的なコードは SSL に適したものにする必要があります。これは AJAX を使えば簡単ですが、websocket 側には不慣れです。

もともと、javascript を使用してサーバーからタイムアウトを取得するシステムを作成し、timeout数秒でサーバーをポーリングしtimeoutて有効期限が切れたかどうかを確認しました。これは完璧だと思っていましたが、クライアント コンピューターの時刻がサーバーの時刻と一致している場合にのみ機能することに気付きました。したがって、これを破棄する必要がありました:-(

とにかく、私の質問が局所化されすぎていないことを願っています。あなたの意見と回答を聞くのを楽しみにしています. 複雑な部分がない限り、PHP データベース コードや jQuery AJAX コードを手伝って時間を無駄にしないでください。私よりも助けてください。私はあなたの意見、および/またはWebsocketがより良い解決策である場合にこれを達成する方法にもっと興味があります:-)。

4

2 に答える 2

1

ロングポーリングと WebSocket API に関して私が見た最良の比較は次のとおりです:
http://www.websocket.org/quantum.html

上記の記事で述べたように、WebSocket API はロング ポーリング (またはその他の疑似双方向通信) よりもはるかに優れていますが、1 つの欠点は、ブラウザーのサポートがまだ完全ではないことです (IE はついに IE10 で WebSocket API のサポートを開始しました)。 .

そのため、完全な双方向通信ソリューションを探している場合は、利用可能な場合は WebSocket API を使用し、利用できない場合は Ajax ロング ポーリングまたは任意のコメット メソッドにフォールバックします。

質問に答えるために、サーバー側/DB クエリをたまにしか作成しない場合 (「ときどき」という用語は相対的であり、システムでのテストの対象となります)、単純な Ajax リクエストで問題ありません。ただし、サーバーに 10 秒以下の間隔でリクエストを送信する場合は、WebSocket API を使用するのが理想的です。

最後の質問に答えると、SSL は WebSocket API で 100% 利用可能です。標準の ws プロトコルの代わりに wss プロトコルを使用するだけで、すぐに使用できます。

于 2013-02-07T13:03:03.850 に答える
0

あなたは「...データベースレコードへの変更を検出しようとしています...」と書いています。データベースの変更を検出するように設計された websockets には何もありません。それが目的ではないだけです。)

経済的な実装では、その変更を検出するために何らかの方法で監視するのではなく、変更時にリスナーに通知する変更エージェント (あなたの場合はログアウト) があるようです。

つまり、特定のスクリプト アクションによってデータベースが変更されたということです。これらの各アクションを拡張して、websocket トランザクションもトリガーすることを検討します。

于 2015-05-27T01:28:20.493 に答える