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