通过PHP服务器将信息推送到Android应用程序?

时间:2012-09-29 12:57:00

标签: java android mobile polling long-polling

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

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

例如,如果我在PHP方面做了以下事情:

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

像这样的工作会保持连接打开并推出Android应用程序的更新吗?

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

1 个答案:

答案 0 :(得分:4)

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

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