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 中的新消息,但我担心它太耗费资源。

4

1 回答 1

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)
{ ... } 

意识到每秒执行一次 SELECT 并不是一件容易的事。

解决方案 2。

我猜另一种方法是这样的:

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

这样,消息将在发送者客户端通过 REST 接口“发送”后立即发送到客户端,不会在任何地方运行检查循环。您甚至可以让您的 server.php(顺便说一句,此解决方案中的标题会产生误导)通过 REST 接口接受 IP,因此不需要额外的 TCP/UDP 连接。

解决方案 3。

如今,许多客户端(如 iOS)都有推送通知系统,如果客户端每天收到的消息不多,最好的方法是通过推送通知来传递它们。这样您就不必拥有低级网络连接,REST 接口就足够了。

于 2012-08-24T05:49:21.560 回答