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

我正在开发短信类型的应用程序。

消息仅在((1)Server->(n)Client)方向上传递

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

一种选择是每隔x秒向服务器请求“新消息?”。这个选项不值得我这样做,因为每x秒为每个设备创建一个HTTP连接非常昂贵。例如,每5个段产生10,000个设备创建新连接。此选项就像系统现在正在运行。

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

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

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

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

然后,客户端立即收到连接已关闭的事件。在这种情况下,关闭连接的事件意味着“新消息”,因此客户端将打开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允许您创建持久的双向连接。因此,您可以将消息从服​​务器推送到客户端,而无需任何客户端请求。

从Java服务器HTTP下载 - java

我需要编写一个小型的Java服务器,可以通过Web浏览器访问它,以下载文件,最好使用套接字。谁能指出正确的方向,因为我只能找到相反的示例(使用Java客户端从http下载)。谢谢,汤姆 参考方案 如果不需要,不要重新发明轮子,嵌入Jetty可以做到这一点:http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jet…

如何使用Java创建docx文件? - java

我正在尝试使用Java创建.docx文件,但由于某些原因我无法打开该文件。错误来自“文件内容有问题”。有谁知道如何解决这个问题? 参考方案 尝试了多个库这是免费的。 http://www.docx4java.org/trac/docx4j还要检查aspose(不是免费的) http://www.aspose.com/categories/java-compo…

从Java中的Python脚本调用和接收输出? - java

从Java执行Python脚本并接收该脚本的输出的最简单方法是什么?我一直在寻找不同的库,例如Jepp或Jython,但是大多数库都已过时。库的另一个问题是,如果我使用库,则需要能够轻松地在源代码中包含一个库(尽管我不需要为库本身提供源代码)。因此,最简单/最有效的方法是简单地执行诸如使用runtime.exec调用脚本之类的操作,然后以某种方式捕获打印输出…

如何使JVM启动更快? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: How to speed up Java VM (JVM) startup time?我正在用Java(或可能是另一种基于JVM的语言)编写命令行实用程序。问题是JVM启动时间。例如,JVM的启动速度…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)