有没有办法在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.
答案 0 :(得分:4)
您的代码在理论上 ,但也会导致不必要的CPU使用率,因为您每分钟都在寻找更新,并且,根据$updater
实现,这可能会浪费CPU,内存和IO。如果你想要一个事件驱动的通信不浪费资源,你需要一个基于事件的后端 - 并且有很多它们在那里,但在PHP中没有,这是因为它是PHP的限制。在PHP脚本中,没有办法去多线程和wait()
,所以基本上你不能实现 Observer 模式,这反过来又阻止了它们用PHP编写事件驱动的库。
我不认为你想这样做。除非您能够毫无疑问地计算用户的手数,否则PHP无法处理此任务。这不是网络服务器的问题,它本身就是PHP本身的问题。每个PHP请求(通过mod_php
,fcgi,php-fpm
)都使用新的PHP进程处理。这使得无法扩展,这就是您需要安装使用其他服务器端技术来实现长轮询的原因。