2

有没有办法在 Android 应用程序和 PHP 脚本之间保持连接打开,所以如果有任何更新,PHP 脚本可以将通知推送到 android 应用程序,而不是应用程序必须每 X 分钟发出一次 HTTP 请求询问任何更新?

我知道如果不在服务器端安装东西来启用它们,这是不可能通过 Ajax 实现的,但我想知道它在 Android 上是否有任何不同。

例如,如果我在 PHP 端执行以下操作:

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

像这样的东西可以保持连接打开并将更新推送到 android 应用程序吗?

服务器正在运行 Apache 和 PHP 5。

4

1 回答 1

4

您的代码理论上可以工作,但也会导致不必要的 CPU 使用,因为您每分钟都在查找更新,并且根据$updater实现,这可能会浪费 CPU、内存和 IO。如果您希望事件驱动的通信不浪费资源,那么您需要一个基于事件的后端——那里有很多后端,但在 PHP 中没有,这是因为它是 PHP 的限制。在 PHP 脚本中没有办法去多线程wait(),所以基本上你不能实现观察者模式,这反过来又阻止了他们用 PHP 编写事件驱动的库。

我不认为你想这样做。除非您可以毫无疑问地数数用户,否则 PHP 无法处理此任务。这不是网络服务器的问题,而是 PHP 本身的问题。每个 PHP 请求(通过mod_php、 fcgi 、php-fpm)都由一个新的 PHP 进程处理。这使得无法扩展,这就是为什么您需要安装使用其他服务器端技术来实现长轮询。

于 2012-09-29T14:35:13.540 回答