【问题标题】:How to establish a socket connection from iPhone to a Apache server and communicate via PHP?如何建立从 iPhone 到 Apache 服务器的套接字连接并通过 PHP 进行通信?
【发布时间】:2011-02-22 23:33:26
【问题描述】:

我正在开发依赖于 LAMP 服务器的 iPhone 游戏。我想创建一个基于“事件”的系统,其中 apache 服务器向 iphone 发送事件。

为此,我正在考虑使用“CFStreamCreatePairWithSocketToHost”连接到 apache 服务器的 80 端口。

我能够成功连接到服务器并通过 iPhone 打开读写流,但我不确定如何使用从 LAMP 服务器到 iPhone 运行的 PHP 将数据发送到 iphone。

我想我可以在 php 中使用 fsockopen 打开一个套接字连接并将数据写入该套接字。我厌倦了运行这段代码

    $fp = fsockopen("tcp://localhost", 80, $errno, $errstr); 
     if (!$fp) {
      echo "ERROR: $errno - $errstr<br />\n";
    } else {

echo"写入套接字
"; fwrite($fp, "wwqeqweqw eqwe qwe \n");

//echo fread($fp, 26);
fclose($fp);
echo "done";
   }

但是,我在 iphone 上看不到任何内容。知道发生了什么,或者如何完成此操作?

谢谢!

【问题讨论】:

    标签: php iphone networking tcp sockets


    【解决方案1】:

    嗯,使用 PHP 来监听传入的连接是次优的,这并不是它的真正目的。有没有办法使用“正常”的基于 HTTP 的通信通道,向 URL 发出普通请求并以您喜欢的任何格式解析返回的数据?

    不管怎样,看看

    【讨论】:

    • 问题是,我们无法在 iPhone 上托管可以在广域网上运行的服务器(这是我从互联网上阅读资料时发现的。)我知道一些应用程序可以调用 iPhone 来执行事件。不知道他们是怎么做到的......
    • @candoyo 我假设他们正在使用某种持久连接。不知道这是否对你有帮助——我不喜欢 iPhone 开发——但是使用“长轮询”技术可以在 HTTP 客户端中实现类似的效果:en.wikipedia.org/wiki/Comet_%28programming%29
    【解决方案2】:

    HTTP 并不是真正的流协议,您可以发送请求并从中获取响应。你可能想看看 apache/php 以外的东西来满足这个要求

    ... 或听从 Pekka 的建议,将您的要求分解为简单的请求响应。即定期轮询您的服务器以查看是否有任何数据等待 iphone 处理...请注意,我不提倡这样做,因为它在网络或程序员上不是很愉快,但它是一种可能性。

    另一种方法是构建您自己的服务(不要使用 apache),该服务将接受您的 iphone 可以连接的特定端口上的连接,并以这种方式进行通信 - 如果您愿意,您甚至可以以这种方式运行 PHP 脚本(不过请阅读 Pekka 提供的链接)。

    另一种方法是将服务器构建到您的网络服务器可以连接到的 iphone 应用程序中 - 但这有点愚蠢,因为您的服务器可能比您的 iphone 在线更多(因为 iPhone 的应用程序不会在后台运行如果它没有越狱,并且 iphone 4.0 还没有向公众发布)。

    选项不变:)

    马特

    【讨论】:

      【解决方案3】:

      使用“拉”而不是“推”模型...

      浏览器通常设计为无状态的。有一些方法可以绕过这个限制,但不要做你描述的事情。

      因为,从不期望服务器将数据“推送”到客户端。这意味着服务器必须知道存在、位置和介质才能将数据传输到客户端,而它们通常不会。

      而不是试图让服务器将事件推送到 iPhone 上的客户端。让服务器存储状态并让 iPhone 使用 AJAX 频繁轮询应用程序状态。

      如果您想要一个在服务器和客户端之间直接 1-1 连接的应用,LAMP/PHP 是错误的做法,因为您需要在服务器和 iPhone 上都运行 LAMP 才能完成您的任务描述。 IE,您不能将数据从 HTTP 服务器“推送”到 HTTP 客户端,您只能将服务器请求的数据返回给客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        • 2014-03-21
        • 2018-06-30
        • 2017-07-23
        • 2012-02-29
        相关资源
        最近更新 更多