0

每五秒一个功能:

private boolean ping() {
    try {
        URL pingServerUrl = new URL(serverResourceLocator);
        HttpURLConnection connection = (HttpURLConnection) pingServerUrl.openConnection();
        if(connection.getResponseCode() == 200) {
            lastPingSuccessful = true;
        }
        System.out.println("pinged");
    }catch(Exception exc) {
       exc.printStackTrace(); 
       return lastPingSuccessful;
    }

    return lastPingSuccessful;

}

叫做。它是 ping 功能的类型。它尝试连接到服务器上的 servlet,并随 URL 一起发送一些凭据serverResourceLocator。困扰我的是每 5 秒打开一个新连接。

我怎样才能避免它?

4

5 回答 5

4

您无法回收 HTTP 连接。HTTP 是一种无状态协议。您可以做的最好的事情是一旦打开连接就不要关闭它并使其保持活动状态并将心跳消息从服务器发送到客户端。

于 2013-01-03T06:22:56.317 回答
0

如果函数的使用是我猜的,即测试servlet,最好把连接部分留在里面;您可以从测试脚本中获得更多覆盖。每 5 秒连接一次几乎没什么。服务器不会有任何感觉。

否则只需将连接存储为全局变量。并在您每次提出请求时重复使用它。

于 2013-01-03T06:22:47.330 回答
0

我认为没有其他选择。您必须进行 http 连接才能获取 URL 的状态。

以下2是Java的轻量级替代品

  • Unix curl 实用程序
  • 来自您的 java 脚本的 Ajax 调用
于 2013-01-03T06:23:41.067 回答
0

工作完成后,您可以释放连接。无论如何,java webserver 被设计为接受多个请求。即使每 5 秒请求一次到达服务器,也不是问题。

于 2013-01-03T09:43:35.297 回答
0

假设我们想在 EXPIRY_TIME 之后删除客户的数据。

我认为可以遵循以下两种方法之一:

  1. 您可以在会话修改时间(建议上次访问时间)检查一些 cron 作业(调度程序)
  2. 对于每个客户端请求,在平面文件系统中设置访问日志并在访问日志中检查 cron 作业

在任何情况下,如果上次访问时间 > EXPIRY_TIME 则删除客户端的数据。

这种方法将节省往返行程并有助于减少交通量。

于 2013-01-03T06:35:57.123 回答