我用Java编写了一个程序,它为一个简单的在线游戏创建了一个套接字连接。该服务器是多客户端的,并且有一个已记录的用户列表。当我关闭客户端时,它会向服务器发送一条消息以注销用户。我还希望当客户端通过 Eclipse(或 Windows 任务管理器)的“终止”按钮终止时,客户端会发送相同的消息。我尝试使用 ShootdownHook 但它不起作用。任何想法? 谢谢。
最佳答案
为了拥有一个健壮的系统,您有时需要实现一个允许服务器关闭连接的心跳机制。例如,如果客户端在过去 30 秒内没有设置心跳,则关闭连接。考虑一下客户端和服务器之间的网络出现故障的情况……或者客户端运行的机器惨遭死亡。在这些情况下,您不能依赖客户端的注销消息到达服务器。
话虽如此,我怀疑 shutdown hook 来不及进行实际的网络 IO。我已成功使用关闭 Hook 来关闭连接。因此,您需要进行更正式的关闭,在启动其他关闭 Activity (尤其是关闭连接)之前发送消息。
关于java - 如何在进程终止时执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005982/