2

私は、setTimeout を呼び出して成功時に自分自身を呼び出す ajax 呼び出しを持つ関数で、単純なチャットの実装に取り​​組んでいます。これは約 30 秒ごとに実行されます。これは問題なく動作しますが、メッセージが来たときにもっとすぐに通知が欲しいです。次のようなjQueryコードを使用したロングポーリングの例がたくさんあります。

function poll()
{
    $.ajax(
    {
        data:{"foo":"bar"},
        url:"webservice.do",
        success:function(msg)
        {
           doSomething(msg);
        },
        complete:poll
    });
}

これがどのように機能するかは理解していますが、これはサーバーにリクエストをすぐに繰り返し送信し続けるだけです。サーバーには、何かが変更されるまで待機するロジックが必要なようです。そうしないと、報告する新しいものがなくても、すぐに応答が返されます。これは純粋に JavaScript で処理されますか、それともサーバー側で実装するものが不足していますか? サーバーで処理される場合、サーバーの実行を一時停止することは本当に良い考えですか? あなたの経験上、これを処理するより良い方法は何ですか? 私の setTimeout() メソッドは十分ですか?

WebSocket については知っていますが、まだ広くサポートされていないため、現在の技術に固執したいと思います。

4

4 に答える 4

1

「長いポーリング」の長い部分を見逃しました。何か面白いことを言わない限り、返さないのはサーバーの義務です。詳細については、この記事を参照してください。

于 2013-08-26T23:58:38.813 に答える
1

Web サーバーへのオープン接続のトレードオフを特定したため、http 接続を消費する (つまり、応答はサーバー側をブロックする必要があります) 対、頻繁に「新しいものはありますか」という要求が帯域幅を消費します。WebSocket は、ブラウザー ベースがサポートできる場合にオプションになる場合があります (ほとんどの「最新の」ブラウザーhttp://caniuse.com/websockets ) 。

于 2013-08-26T23:58:54.273 に答える