2

OK、これが状況です-シンプルで明確です:

  • ページA:バックグラウンドプロセスを開始するajaxリクエスト(としましょうintermediate.php)を実行します-としましょうback.php
  • interm.php戻り値
  • back.phpデータベースで進行状況を更新しながら、終了するまで動作し続けます。

では、ページAはどのようにしback.phpて終了したことを通知されるのでしょうか。

(たとえば、dbの進行状況をチェックするスクリプトに対して1〜2秒ごとにajaxリクエストを起動することを考えましたback.phpが、それはかなり奇妙で、間違いなく効率的ではないようです...)

何か案は?

4

2 に答える 2

6

非常に一般的でそれほど奇妙ではないロングポーリングまたはショートポーリングの手法を実行できます。それは多くの不必要な要求をしますが、それはそこにある最も単純で最もサポートされている方法です。

2番目の方法は、Webソケットを使用することです。現在、html5を介したWebソケットは現在一般的にサポートされていませんが、代わりに、フラッシュなどの他のメソッドへのフォールバックを処理するライブラリを使用するか、ブラウザ/デバイスが以前のメソッドをサポートしていない場合はロングポーリングを使用することもできます方法。リアルタイム通信に最適なライブラリはSocket.IOです。これにより、リアルタイムまたはほぼリアルタイムのさまざまな実装が可能になり、使用する通信方法を選択することもできます。Paasなどの一部のクラウドベースのWebサービスは、Webソケットを広くサポートしていません。ライブラリは、Webソケット、フラッシュソケット、ロングポーリングなど、特定の通信方法を選択または強制できるようにすることで、これを回避します。

しかし、phpを使用しているので、これを試すことができます:https ://github.com/lemmingzshadow/php-websocket

これらのサイトのいくつかで言及されているように、phpでwebsocketを使用することは、node.jsやtwistedpythonほど簡単ではありません。しかし、それにもかかわらず、それは達成可能であり、ある程度は機能します。node.jsバックエンドを使用してリアルタイム処理を実行する方が、そのように機能することを意図していないテクノロジーを強制しようとするよりもはるかに簡単であることがわかりました。

于 2012-08-01T01:45:25.533 に答える
1

基本的に探しているのはコメットです。これが良いスレッドです:

PHPでcometを使用していますか?

于 2012-08-01T01:47:50.167 に答える