之前完成的一个以C#客户端通过Hessian调用Java服务的企业信息化项目,要求当web应用重新发布或者应用服务器重启时需告知所有客户端:由于什么原因(message),应用服务器将在多久(time)之后重启,请所有用户在多久之内做好数据保存工作,客户端将在多久之后强行退出。这里有2中实现方式:
1) 推的模式,服务器发消息通知所有客户端;
2) 拉的模式,客户端去监听服务器消息,服务器是否要重启;
相对来说2)的实现方式更简单,于是本案采用了2),为此需要在客户端开设一个Listen线程,用以监听应用服务器是否要重启。通常来说C#客户端应用,从启动到进入主窗口作业区有3个过程:
1) program引导;
2) login窗体,登录处理;
3) 进入main窗体,进行各种具体应用操作;
为此,建议在login窗体登录成功后,就启动ListenThread线程。
public class ListenThread { private static int count = 5*60*1000; // public static void ForceClosed() { ForceClosed(count); } //private static int count = 0; public static void ForceClosed(Object para) { count = (int)para; boolean listen = true; while(listen){ if(应用服务器是否要重启){ listen = false; } Thread.Sleep(count); } 强行关闭客户端 } } /// 登录成功之后,启动ListenThread线程 //启动相关服务线程 Thread listenThread = new Thread(new ParameterizedThreadStart(ListenThread.ForceClosed)); listenThread.Start(5 * 60 * 1000); |
为了友好起见,当ListenThread监听到应用服务器将要重启,执行强行关闭客户端操作的时候,最好能弹出一个对话框窗体(toplevel=true),显示下述信息:
1) 重启原因;
2) 数据保存提示;
3) 时间提示:多久之后客户端要强行关闭,多久之后用户可继续使用;