如何对流程终止采取行动?

时间:2011-05-15 01:47:51

标签: java sockets process terminate

我用Java编写了一个程序,为简单的在线游戏创建套接字连接。服务器是多客户端,并具有记录的用户列表。当我关闭客户端时,它会向服务器发送一条消息以注销用户。我还希望当客户端使用Eclipse的“终止”按钮(或使用Windows任务管理器)终止时,客户端会发送相同的消息。我尝试使用ShootdownHook,但它不起作用。任何的想法? 感谢。

2 个答案:

答案 0 :(得分:1)

为了拥有一个强大的系统,您在某些时候需要实现允许服务器关闭连接的心跳机制。例如,如果客户端在过去30秒内未设置心跳,则关闭连接。考虑一下客户端和服务器之间的网络出现故障的情况......或者客户端运行的机器死亡的情况。在这些情况下,您不能依赖客户端的注销消息进入服务器。

话虽如此,我怀疑关闭挂钩为时已晚,无法进行实际的网络IO。我已成功使用关闭挂钩来关闭连接。因此,您需要进行更正式的关闭,以便在其他关闭活动(特别是关闭连接)启动之前发送消息。

答案 1 :(得分:0)

在Eclipse中的红色方块中,客户端无法做任何事情。它以极端的偏见终止了jvm' - 没有代码运行。没有钩子,没有任何东西。

正如@Dilum解释的那样,你可以应对服务器端。