您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

socket 怎么知道是否已经四次挥手了

socket 怎么知道是否已经四次挥手了

对应 server-client 的结构,server 往往会在 client 长时间不发消息后主动关闭连接,比如 Mysql 的 wait_timeoutinteractive_timeout 等等参数。

除了 Mysql 还有 RabbitMQ、redis、memcached 等等 server 程序都会这么做。

那请问我在编写客户端的业务代码(!!!)的时候,怎么保证连接可用呢?

  • 方案一: 随便发一个东西,比如 Mysql 的 select version() ;redis 的 ping
  • 方案二:不管,直接用,直到抛出 Timeout 错误异常

我感觉两个方案都不好。

第一个方案,每个 curd 操作都要提前执行 Mysql 的 select version() ;redis 的 ping 等操作,这很浪费时间

方案二的话,捕捉异常和重试的代码会让一切看起来很糟糕,有代码洁癖不能忍

我觉得更加合理的方式是直接判断 client_socket_connection.is_close() ,这个操作应该是直接问本地的操作系统:这个 socket 是不是被四次挥手了呀???

但是我发现 Python 貌似没有提供这个功能(即:直接问本地的操作系统:这个 socket 是不是被四次挥手了呀???)

参考: socket --- 底层网络接口

不知道其他语言有没有?

只考虑四次挥手的情况,不考虑网线被人剪短等网络不可达的情况
python 2022/2/7 16:57:17 有570人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶