2011-01-04 16 views
1

私はcodeigniter環境にいるので、このようなことをしたい。 1人のO-wnerといくつかのC-リエントを持つチャットルームがあります。 これは私が書こうとしているものですAjaxの応答を同期する

1)Cが部屋に入ります。

2)準備ができたらは、全てのCsは、すべてのクライアントが信号と以前のAjax reponsesが送信され、

3)C Csが準備するために、すべてのを待つAJAXリクエストを送信し、「準備完了」リンクをクリック

4)Cは、すべてのクライアントに対して同じ瞬間にする必要があります応答()彼らは、持っているもの-に-DO :)

やって起動を受信したときを追跡する簡単な方法があります接続しているすべてのクライアントのうち、同時にそれらのすべてに信号を送ることができますか?今の

私はステップ3でこだわっている私は、この

$.ajax({ 
url: 'myurl.php', 
success: function() { doStuff(); } 
}); 

と私のhypotethicファイルmyurl.phpに私は

while ($this -> MyModel -> waitingQueue) { 
sleep(1) } 
return "ok"; 

を持っているようなコードを持っている私は、これがないと思います私はモデル内で変数 "waitingQueue"を変更すると、すべてのクライアントが同じインスタンスで応答を受け取るかどうかを制御することができないので、良いアプローチです。

ありがとうございます!

答えて

0

私はsetInterval()をjavascriptで使用することをお勧めします。サーバーの状態を継続的にチェックすることができます。

私はあなたのクライアントをシンプルに同期させることはできないと思います。彼らは同時にサーバーから答えを得ることはありません。

すべてのクライアントの監視を同期させ、一括してポイントを設定すると、クライアントシェルがイベントをトリガーするときに、良いチャンスが得られます。

...そしてあなたは、サーバー上のすべてのクライアントからの定期的なAjaxのチェックとの同期を模倣しようとすることができますclearInterval()

+0

返信いただきありがとうございます。すべてのクライアントが家の同じ部屋にいることを想像してみてください(それはアプリの目的です)、私は時間を同期さえしなくても、同時に答えを受け取るでしょう(おそらく数ミリ秒です) .. –

+0

右は、働くことができます。誰もが同じブラウザと同様のシステムを使用している場合。 – helle

1

を忘れないでください。 jQuery.queue関数をチェックし、SetIntervalでキューポーリングを開始し、そのキューのチェックを含む関数をプッシュします(これらの関数ではキューをフラッシュします)。

さらに踏み込んだりたいのであれば、HTTPでPUSHの動作をしようとすると、「Comet」と辛抱強なHTTP接続を見なければならないが、単純ではないだろう.-少なくとも、あなたのネットワーク、サーバー、人(イントラネットのような)に接続している人々を完全に制御すれば、より簡単になります。

または、現在閉じているプロジェクトのGoogle Waveでドキュメントを確認できます。