通过持久连接实现与POST(HTTP)的推送技术连接


Implementing push technology connection with POST (HTTP) through persistent connection

我正在开发一个文本消息类型的应用程序。

消息仅在方向((1)服务器->(n)客户端)上进行通信

  • 服务器:PHP(LAMP)
  • 客户端:Android(Java)

一种选择是每隔x秒向服务器请求一次"新消息?"。这个选项不值得我使用,因为为每个设备每x秒创建一个HTTP连接非常昂贵。例如,10000个设备每5段创建一个新连接。这个选项就像系统现在正在工作一样。

选项二是我想实现,但我不知道如何在(JavaPHP)中实现。

想法如下,基于推送技术:

保持从客户端到服务器的连接持续打开。该连接将永远不会传输任何数据。

当服务器想要向客户端发送消息时,强制关闭连续连接。

然后,客户端立即接收到连接已关闭的事件。在这种情况下,关闭连接的事件意味着"新消息",因此客户端将打开POST连接以获取数据。

如何持续保持Java和PHP之间的开放连接,并且服务器能够立即关闭它?

这是java和PHP之间POST连接的工作代码,尝试从这段代码中是否可以无限期地打开连接。

Php:

<?php    
    if (isset($_POST['myId']))
    {       $in = $_POST['myId'];               
            //(...)             
            echo $myResponse;               
    }        
?>

Java:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);                      
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair(key,content));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);

WebSocket应该是您的最佳解决方案。您可以找到许多适用于不同语言的库,甚至适用于PHP和Java。WebSocket允许您创建持久的双向连接。因此,您可以在没有任何客户端请求的情况下将消息从服务器推送到客户端。