Tag: keep alive

能够保持活动的HTTP服务器

我正在尝试用Java创建一个能够提供保持连接的http服务器。 我正在使用com.sun.net.httpserver.HttpServer类。 import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; public class httpHandler implements HttpHandler { private String resp = “”; private OutputStream os = null; public void handle(HttpExchange t) throws IOException { System.out.println(“Handling message…”); java.io.InputStream is = t.getRequestBody(); System.out.println(“Got request body. Reading request body…”); byte[] b = new […]

如何使用来自Java / Python Web cron的聋人请求来运行App Engine / Java应用程序?

App Engine允许您30秒加载您的应用程序 我的应用程序需要大约30秒 – 有时更多,有时更少。 我不知道如何解决这个问题。 如果应用程序处于空闲状态(暂时没有收到请求),则需要重新加载。 因此,为了避免需要重新加载应用程序,我想通过每隔一段时间ping应用程序来模拟用户活动。 但是有一个问题。 。 。 如果我ping应用程序并且它已经被App Engine卸载,我的Web请求将是对应用程序的第一个请求,应用程序将尝试重新加载。 这可能需要超过30秒并超过加载时间限制。 所以我的想法是ping应用程序但不等待响应。 我通过从浏览器访问该站点来手动模拟,发出请求并立即关闭浏览器 – 它似乎使应用程序保持活跃状态​​。 有关在Python或Java web cron中实现此目的的任何建议(我假设Python解决方案会更简单)?

Tomcat,HTTP Keep-Alive和Java的HttpsUrlConnection

我有两个Tomcat服务器需要维持持久连接以减少SSL握手。 一台服务器(代理)位于DMZ中,而另一台服务器安全地位于另一台防火墙后面。 代理基本上只运行一个简单的servlet,在将请求转发到安全机器之前进行一些健全性检查。 在初始请求中,机器在执行实际工作之前交换证书。 因此,我希望在几分钟的超时时间内保持持久连接。 要与安全服务器通信,代理上的servlet使用HttpsUrlConnection 。 我已经设置了WireShark,我注意到无论我在安全机器上为连接器设置了keepAliveTimeout值,TCP连接在大约5或10秒后关闭。 这个数字似乎与我所读到的是默认超时以及Java如何处理HTTP Keep-Alive。 此链接说明如果服务器发送了Java,则表示Keep-Alive超时,否则它在关闭连接之前使用5秒(直接连接)或10秒(代理连接)。 我想弄清楚的是我如何强制Tomcat发送Keep-Alive标头。 不, Connection: Keep-Alive ,但Keep-Alive: timeout=x 。 我已经尝试过使用Apache HTTP服务器并修改httpd.conf中的keepAliveTimeout会导致Keep-Alive标头更改其超时值。 此外,Java确实遵守此超时。 更新(12/23/11):在运行了几个实验之后,我尝试使用Apache的HttpClient(3.1)而不是HttpsUrlConnection编写一些快速而脏的代码。 看来HttpClient在设置为使用Keep-Alive时,只是等待服务器关闭连接。 我不知道它会等多久。 我正在拍摄以保持HTTP连接活动3到5分钟。

JSch:如何保持会话活跃起来

我正在使用SSH编写用于静态路由管理的Java GUI程序。 我的代码如下: import com.jcraft.jsch.*; import java.io.*; public class Konsep { String status; static String username; static String hostname; String inputcommand; String output; static Session session; JSch jsch = new JSch(); public String status(String stringstatus) { stringstatus = status; return stringstatus; } public String InputCommand(String inputcommandstatus) { inputcommandstatus = inputcommand; return inputcommandstatus; } public void […]

HttpsUrlConnection和keep-alive

我在我当前的项目中使用com.sun.net.httpserver.HttpsServer处理客户端身份validation等。目前它只打印出客户端地址/端口,以便我可以检查是否有一个TCP连接用于多个请求( keep-alive )或者是否为每个请求建立了新连接(因此每次都进行新的SSL握手)。 当我使用FireFox对服务器发出多个请求时,我可以看到keep-alive正在运行。 因此,服务器部分可以正常使用GET和POST请求。 如果我使用HttpURLConnection对服务器发出请求(在这种情况下不使用SSL), keep-alive也会起作用:只为多个顺序启动的请求建立一个连接。 但是,如果我使用HttpsURLConnection (使用完全相同的代码,但使用 SSL),那么keep-alive将不再起作用。 因此,对于每个请求,都建立了一个新连接,尽管我使用相同的SSLContext (和SSLSocketFactory ): // URL myUrl = … // SSLContext mySsl = … HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection(); conn.setUseCaches(false); conn.setSSLSocketFactory(mySsl.getSocketFactory()); conn.setRequestMethod(“POST”); // send Data // receive Data 如何强制HttpsURLConnection使用keep-alive因为许多请求会导致许多SSL握手,这是一个真正的性能问题? 更新(2012-04-02):我没有每次调用mySsl.getSocketFactory() ,而是尝试缓存SSLSocketFactory 。 但没有改变。 问题依然存在。