在我的网络应用中,客户端同时是server
和client
。就像在对等应用程序中一样。在客户启动web-app之后,首先要做的是:检查互联网连接是否可用(当jsp页面被加载时)< / em>的。如果连接可用,则将节点信息发送到远程数据库。这只是为了知道连接到主服务器的节点的地址。
现在,如果节点与服务器断开连接(由于互联网连接失败或其他原因),我希望从数据库中删除节点的信息。
一种方式,我认为实现这一点是在主服务器上启动一个线程,该线程不断尝试连接到数据库中的所有节点。但我对这个选项不满意。可能还有另一种方式。或者我可以更好地实现 this 。
请建议,我该怎么做?
我必须在主服务器上启动一个线程,我应该从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'.
答案 0 :(得分: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方面的任何改进,但是使用此解决方案,服务器端逻辑将非常简洁和简单