5

私はPHPサーバーを持っており、クライアントBのアクションについてクライアントAを更新する必要があります。それは通常どのように達成されていますか?

私の現在の解決策は次のとおりです。

  1. A は、これについてオープン$.ajax(...).done(function myCallBack(){...});コールを残します。
  2. A が入っmyCallBack(){...}ているときは、別の を発行します$.ajax(...).done(function myCallBack(){...});。このようにして、サーバーとの通信は開いたままになり、いつでも新しい情報を受信できます
  3. PHP は、2 つの同時セッションとの間でデータを転送するために、セッション間通信ファイルを継続的にチェックする必要があります。

開いたまま$.ajax(...).done(function myCallBack(){...});にする(そして常に新しいものを生成する)のがそれを行う方法ですか?

セッション間通信の場合 - イベントなどを通知する方法はありますか (一部のファイルを継続的に監視する代わりに [リソースの無駄!])?

4

2 に答える 2

2

これが私がそれを解決した方法です:

クライアントAはオープンajaxコールを残します:: $.ajax(...).done(function myCallBack(){...});PHPサーバー側(セッション)で、Asemaphoreはusingをロックし、sem_acquire($semaphore_A)待機します。

クライアントB$semaphore_Aは、を使用してセマフォを削除し、クライアントJSコールバックに戻るAsem_remove($semaphore_A)を解放します。myCallBack()

もちろん、これは非常に単純であり、プロセス間でステータスとデータを交換するために共有メモリ(例shm_attach())を使用します。

この手法に固執している他の開発者の場合:

デバッグに非常に時間がかかったのは、セッションを開いて(session_start())、閉じなかった()という事実ですsession_ write_ close()。これにより、他のプロセスがロックされ、同時実行が妨げられました。

于 2012-09-15T21:42:57.013 に答える
0

クライアント A はサーバーにデータを送信し、クライアント B はサーバーをポーリングして変更を要求する必要があります。変更がある場合、クライアント B は次のポーリングでそれらを取得します。

于 2012-08-22T12:16:25.057 に答える