通过 PHP 服务器将信息推送到 android 应用程序? [关闭]
Posted
技术标签:
【中文标题】通过 PHP 服务器将信息推送到 android 应用程序? [关闭]【英文标题】:Pushing info to an android app via PHP server? [closed] 【发布时间】:2012-09-29 12:56:59 【问题描述】:有没有办法在 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。
【问题讨论】:
您正在寻找类似 websocket 的东西。见code.google.com/p/phpwebsocket @hakra 我宁愿不必在服务器端安装任何东西或更改任何服务器设置。在android端不能通过java打开web socket连接,PHP脚本只是使用ob_flush()和Android/Java接收数据推出新数据? 您应该首先投入一些时间并研究一下这个问题。如果你得到反馈而不是先做功课,你会在这里提出越来越多的细节。例如。首先找出您的android 为通过HTTP 进行消息传递提供的哪些 协议。然后你可以看看是否有使用 PHP 的解决方案。是的,可能是您需要安装一些东西。在计算中就是这样。所以请先研究一个或其他部分,例如告诉你想在 android 端或服务器端使用什么。对于问答网站,其他所有内容都有点开放。 @hakra 如果我知道我想使用什么,我为什么要在这里问?我已经详细说明了我的情况,如果您不愿意或无法回答,请继续讨论其他问题,并将其留给会回答的人。 对于您的 Android 应用来说,每 X 秒启动一次单独的简短轮询可能比保持连接打开更好。我猜后者会更快地耗尽电池。您甚至可以在服务器上实现“X 秒后回调”的逻辑,因此在负载较重时,所有应用程序都会很快学会减少调用频率。 【参考方案1】:您的代码理论上可以运行,但也会导致不必要的 CPU 使用,因为您每分钟都在寻找更新,并且根据 $updater
的实现,这可能会浪费 CPU、内存和 IO .如果您希望事件驱动的通信不浪费资源,那么您需要一个基于事件的后端——那里有很多后端,但在 PHP 中没有,这是因为它是 PHP 的限制。在 PHP 脚本中没有办法去多线程和wait()
,所以基本上你不能实现 Observer 模式,这反过来又阻止了他们在 PHP 中编写事件驱动的库。
我认为你不想这样做。除非您可以毫无疑问地数出手指上的用户数,否则 PHP 无法处理此任务。这不是网络服务器的问题,而是 PHP 本身的问题。每个 PHP 请求(通过mod_php
、fcgi、php-fpm
)都由一个新的 PHP 进程处理。这使得无法扩展,这就是为什么您需要安装使用其他服务器端技术来实现长轮询。
【讨论】:
php.net/manual/en/book.libevent.php 并且您还可以在 PHP php.net/manual/en/book.pcntl.php 中在 unix 上进行线程化。 @hakra 似乎是PCNTL can't be used in a webserver。 Libevent 可能是一个很好的起点,但the examples 的级别太低了,不容易理解 @ClickUpvote 没什么特别的on the Android part。 @hakra 据我了解,您是在告诉 PHP 语言 可以多线程并处理服务器事件。然而,这与通常的 PHP 编程模型有很大不同,并且还需要一个非标准的部署环境。恕我直言,每一种可以用本机代码扩展的语言都可以用来做几乎所有事情,但是以这种方式弯曲 PHP 是没有用的,因为你没有 周边工具 其他解决方案具有,并且在工具和生态系统中是使可能的替代方案成为正确方案的真正价值 @Raffaele:是的,你是对的,我看到一些使用多线程/信令的用户迷路了。 PHP 中的一个原则在历史上是不共享的。然而另一个是“PHP 是胶水”。那么我应该在您的评论中添加什么;)而且您需要知道我是 fastcgi 的粉丝 - 我想在服务器模块中多线程 PHP 可能会很糟糕。以上是关于通过 PHP 服务器将信息推送到 android 应用程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章