2012-08-17 172 views
1

我开发了一个类似聊天的应用程序,我的服务器应该用PHP编写,客户端应该是被动的,只需要监听数据。连接消息接收和消息发送脚本

现在,我要开始与具有两个脚本: send.php 和 server.php

send.php提供REST API通过GET接口发送消息到另一个客户端。

server.php应该是一个TCP服务器接受来自客户端的连接,为了通过套接字发送数据并且目前基于http://php.net/manual/en/sockets.examples.php,所以现在客户端只连接到他并且他发回一些测试字符串。

我的问题是,我应该以某种方式连接send.php和server.php,以便当通过send.php server.php推送消息实际上会发送它。

我该怎么做?

我猜想的一个选择是将推送的消息存储在服务器存储中并检查server.php中的新消息,但我担心这太耗费资源。

+0

PHP真的不是这样做的正确语言。你是如何连接到PHP的?有办法在PHP中完成它,但它们很混乱,有许多语言/框架可以更有效地实现这一点--Java和Node.js立刻就会涌现出来。 – DaveRandom 2012-08-23 13:09:11

+0

@DaveRandom,它只是基于REST的服务而已,并且与编写“$ _GET ['name']”相比,您无法获得更多的便利。但它仍然有这个插座的小部分。我同意,如果主要是套接字,我会用Java/C#去。 – Alehar 2012-08-24 05:19:39

回答

0

解决方法1.

我解决我的问题在某种程度上,我原本认为,这意味着我做server.php活跃,因此会检查新的信息每秒钟:

function getNewMessages() 
{ 
    $arrOfMessages = array(); 
    $selectQuery = "SELECT * FROM messages WHERE unread=1"; 
    $result = mysql_query($selectQuery); 
    return $arrOfMessages; 
} 

if(count($newMessages) > 0) 
{ ... } 

意识到制作在一秒钟内选择一次并不是什么大事。

解决方案2.

另一种方法我想应该是这样的:

  • server.php接受有关客户端IP数据并将其绑定到用户会话;
  • 将其存储在数据库中; send.php与客户端建立新的连接,并且 向它发送消息。

这种方式的消息会在发送方客户端通过REST接口'发送'后立即发送给客户端,不会有检查循环在任何地方运行。你甚至可以让你的server.php(标题在这个解决方案btw中误导)通过REST接口接受IP,所以不需要额外的TCP/UDP连接。

解决方案3.

许多客户(如iOS版)这天有推送通知系统,如果客户没有得到每天的邮件太多,要做到这一点,最好的办法就是要救他们是通过推送通知。这样你就不必拥有低级网络连接,而REST接口就足够了。