如何建立从iPhone到Apache服务器的套接字连接并通过PHP进行通信?

时间:2010-05-23 17:53:30

标签: php iphone networking tcp sockets

我正在开发一款依赖于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 {

回显“写入插座
”;     fwrite($ fp,“wwqeqweqw eqwe qwe \ n”);

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

但是,我没有在iPhone上看到任何内容。任何想法发生了什么,或者如何实现这一目标?

谢谢!

3 个答案:

答案 0 :(得分:1)

嗯,使用PHP来监听传入的连接是次优的,它并不是它真正构建的。是否无法使用“普通”基于HTTP的通信通道,对URL进行简单请求并以您喜欢的任何格式解析返回的数据?

无论如何,请查看

答案 1 :(得分:1)

HTTP实际上不是流协议,您发送请求并从中获取响应。您可能希望查看除apache / php之外的其他内容以满足此要求

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

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

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

选项非凡:)

马特

答案 2 :(得分:0)

使用'pull'代替'push'模型......

浏览器通常设计为无状态。有很多方法可以解决这个限制,但不能做你正在描述的事情。

因为服务器从不期望将数据“推送”到客户端。这意味着服务器必须意识到将数据传输到客户端的存在,位置和介质,而这通常不是。

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

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