2

AndroidアプリとPHPスクリプトの間の接続を開いたままにする方法はありますか?更新がある場合、アプリがX分ごとにHTTPリクエストを行うのではなく、PHPスクリプトが通知をAndroidアプリにプッシュできます更新を要求するには?

サーバー側にインストールして有効にすることなしにAjaxを介してこれを行うことはできないことは知っていますが、Androidでは何か違うのではないかと思います。

たとえば、PHP側で次のことを行った場合:

<?
set_time_limit(0);
while (true)
{
   $updates = $updater->find();
   if ($updates)
      ob_flush( $updates->getAsJSON() );
   sleep(60);
}
?>

このようなものは、接続を開いたままにして、Androidアプリへの更新をプッシュするために機能しますか?

サーバーはApacheとPHP5を実行しています。

4

1 に答える 1

4

コードは理論的には機能しますが、毎分更新を探すため、不要なCPU使用率も発生します。$updater実装によっては、CPU、メモリ、IOを浪費する可能性があります。リソースを浪費しないようにイベント駆動型の通信が必要な場合は、イベントベースのバックエンドが必要です。それらはたくさんありますが、PHPにはありません。これは、PHPの制限であるためです。PHPスクリプトでは、マルチスレッドとを実行する方法がないため、基本的にObserverwait()パターンを実装することはできません。これにより、PHPでイベント駆動型ライブラリを作成できなくなります。

私はあなたがこれをしたいとは思わない。間違いなくユーザーを指で数えることができない限り、このタスクをPHPで処理することはできません。これはWebサーバーの問題ではなく、PHP自体の問題です。各PHPリクエスト(mod_php、fcgi、を介してphp-fpm)は、新しいPHPプロセスで処理されます。これにより、スケーリングが不可能になります。そのため、他のサーバー側テクノロジーを使用してインストールし、長いポーリングを実装する必要があります。

于 2012-09-29T14:35:13.540 に答える