我用 Java 编写了一个程序,它为一个简单的在线游戏创建了一个套接字连接。该服务器是多客户端的,并记录了一个用户列表。当我关闭客户端时,它会向服务器发送一条消息以注销用户。我还希望当客户端使用 Eclipse 的“终止”按钮(或使用 Windows 任务管理器)终止时,客户端发送相同的消息。我尝试使用 ShootdownHook,但它不起作用。任何的想法?谢谢。
问问题
183 次
2 回答
1
为了拥有一个健壮的系统,您有时需要实现一个心跳机制,允许服务器关闭连接。例如,如果客户端在过去 30 秒内没有设置心跳,则关闭连接。考虑客户端和服务器之间的网络出现故障的情况......或者客户端运行的机器死于丑陋的死亡。在这些情况下,您不能依赖客户端的注销消息到达服务器。
话虽如此,我怀疑关闭挂钩来不及做实际的网络 IO。我已成功使用关闭挂钩来关闭连接。因此,您需要进行更正式的关闭,在其他关闭活动(尤其是关闭连接)开始之前发送消息。
于 2011-05-15T01:58:16.940 回答
0
在 Eclipse 中出现红色方块时,您在客户端的任何操作都无法执行。它以“极端偏见”终止jvm——没有代码运行。没有钩子,什么都没有。
正如@Dilum 解释的那样,您必须在服务器端应对。
于 2011-05-15T02:10:29.600 回答