【问题标题】:Java Mult-Client Server Socket. Pipe broken detectionJava 多客户端服务器套接字。管道破损检测
【发布时间】:2013-05-29 11:55:47
【问题描述】:

我正在创建一个有很多客户端的服务器解决方案。使用 arraylist 存储用户信息和套接字。广播消息...

在客户端,

当服务器关闭时,将抛出异常,我可以捕获异常并执行 相应的动作。

但是在服务器端,

当客户端离线时,服务器不会抛出异常。请问有什么方法可以实现。

我现在正在这样做,每 10 秒发送一次广播消息,以查看连接是否正常。而不是缩短健康检查广播消息之间的间隔。如果有什么方法可以做到,比如setListener?

【问题讨论】:

    标签: java sockets


    【解决方案1】:

    对于这种类型的连接在 java 中有很多解决方案(比如 Apache Mina),但是除非客户端发送消息通知服务器它即将断开连接,否则没有其他方法可以告诉,除非服务器和客户端之间的心跳失败,听起来你已经实现了。您可以看到将侦听器用作故障安全解决方案的问题,因为如果客户端失败,它将永远不会让服务器知道,并且您将拥有一个孤立的会话。

    【讨论】:

    • 客户端socket上没有onClose方法?还是有可能实现它?谢谢
    • 你必须实现它。就像我说的那样,它仍然不完美。如果客户端设备断电怎么办?它不会告诉服务器任何服务器将在下一次心跳时抛出错误。
    • 我知道它不会告诉服务器任何事情。我要自己实现。但是如果有异常抛出,我可以在 catch 块内调用回调方法。但是如果我强制关闭设备或程序。客户端也没有显示错误。那么唯一的解决方案是在服务器的下一个心跳上抛出一个错误?顺便说一句,谢谢:D
    • 好吧,听起来你的基地已经被服务器失去与客户端的连接所覆盖。在客户端,如果您没有收到服务器的消息,您可以设置关闭连接的超时时间。因此,如果您每 10 秒 ping 一次,那么超时可能是 30 秒。 Push Mail 的工作方式类似:technet.microsoft.com/en-us/library/aa997252(v=exchg.150).aspx.
    • 我现在做的是你说的方法。每10秒Ping一次。但是这个程序是在小学使用的。大约 300 个客户端每 10 秒 ping 一次服务器。而且学校的网络很差。我想尽可能减少带宽的使用。我知道 ping 不会花太多钱,但我只是在寻找更好的方法。当套接字处置时,将调用一个方法,我可以在其中设置一些异常操作:D 谢谢顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 2023-04-01
    • 2012-06-05
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    相关资源
    最近更新 更多