0

在我的网络应用程序中,客户端既是serverclient是。就像点对点应用程序一样。客户端启动网络应用程序后,首先要做的是检查互联网连接是否可用(加载 jsp 页面时)。如果连接可用,则将节点信息发送到远程数据库。这只是为了知道连接到主服务器的节点的地址。

现在,如果节点与服务器断开连接(由于互联网连接失败或其他原因),我希望从数据库中删除节点的信息。

一种方法,我认为实现这一点是在主服务器上启动一个线程,该线程不断尝试连接到数据库中的所有节点。但我对这个选项不满意。可能还有另一种方式。或者我可以以更好的方式实现一点。

请建议,我该怎么做?

而且我必须在主服务器上启动一个线程,我应该从jsp页面调用线程函数吗?像 :

<%-- This is a jsp page --%>
.....
........
<%-- start a new thread that does that task --%>

<% new ThreadClass().startContinuousThread(); %>
......
.........

注意:每个节点都连接到中央服务器:

      final URL url = new URL("http://sevrer/servlet");
      final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
      int responseCode = urlc.getResponseCode();
      if(responseCode == 200){
          connected = true;
          System.out.println("Initial connection to the server successful");
      }

      // send the node information to the servlet via a 'parameterized query'.
4

1 回答 1

1

我建议您不要在服务器端进行此检查,而是在客户端发送上进行此检查。类似于以配置的时间间隔发送 ping 请求。就像连接到服务器的代码一样,编写定期调用另一个 servlet 的代码。

final URL url = new URL("http://sevrer/pingServlet");
final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
int responseCode = urlc.getResponseCode();

服务器将只保留一个计时器任务,该任务仅检查到达服务器中每个节点条目的最后一个 ping 请求。如果任何节点的 ping 条目未在配置的超时间隔内到达,则服务器将从其数据库中清除该节点。

此解决方案的优点是您的服务器不会因每次都启动请求而超载。但是,我没有看到 I/O 端有任何改进,但是使用此解决方案,服务器端逻辑将非常干净和简单。

于 2012-12-10T11:53:12.570 回答