Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从数据库中删除不再连接到中央服务器的节点?_Java_Jsp - Fatal编程技术网

Java 如何从数据库中删除不再连接到中央服务器的节点?

Java 如何从数据库中删除不再连接到中央服务器的节点?,java,jsp,Java,Jsp,在我的web应用程序中,客户端同时是服务器和客户端。就像在对等应用程序中一样。客户端启动web应用程序后,首先要做的事情是检查internet连接是否可用(加载jsp页面时)。如果连接可用,节点信息将发送到远程数据库。这只是为了知道连接到主服务器的节点的地址 现在,如果节点与服务器断开连接(由于internet连接失败或其他原因),我希望从数据库中删除节点的信息 我认为实现这一点的一种方法是在主服务器上启动一个线程,该线程不断尝试连接到数据库中的所有节点。但我对这个选择不满意。也许还有别的办法。

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

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

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

请建议,我该怎么做

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

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

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

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

final URL url = new URL("http://sevrer/pingServlet");
final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
int responseCode = urlc.getResponseCode();
服务器将只保留一个计时器任务,该任务只检查服务器中每个节点条目到达的最后一个ping请求。如果任何节点的ping条目未在配置的超时时间间隔内到达,则服务器将从其数据库中清除该节点


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

当发出ping请求时,我是否要再次将
节点信息
发送到服务器?是的。您可以有一个节点标识符,该标识符对于该节点是唯一的,可以从机器接口的MAC地址或其他地方获取。这可以在ping请求中使用,该列表也可以在服务器端维护。
final URL url = new URL("http://sevrer/pingServlet");
final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
int responseCode = urlc.getResponseCode();