zmq学习中的问题

  1. sub在一段时间后出现收不到消息的情况
    现象: pub/sub使用tcp通信,sub订阅了所有消息,开始正常 ,一段时间后收不到消息。
    可能原因:因为pub是bind, sub是connect, pub与sub之间网络中断过(两地之间切换了链路),可能中断这段时间, pub连续发送消息都不成功,操作系统层套节字关闭。由于中间网络不通,FIN没到到达对方,sub的操作系统套节字并没有收到,也就不会出现问题而重连,操作系统套节字仍然是合法的,只是没有数据到达。当网络恢复后,sub仍然用之前的套节字收消息,此时pub上已经没有该连接了,所以sub也就无法收到消息。(如果底层套节字有设keepalive,2小时后会发现?)
    解决方法:
    (1)自定义心跳,sub一段时间没有收到报文,重新创建。
    (2)pub做connect, sub做bind
    =======================
    找到了一个相似的:
    https://grokbase.com/t/zeromq/zeromq-dev/135gdn00cn/help-on-the-pub-sub-socket-reconnection
    在这里插入图片描述
  2. PUB发送后立刻退出,SUB收不到消息
    现象:一个PUB测试程序,PUB作为connect端, 连接-发送消息-退出,对端SUB收不到消息。即使发送消息后,sleep一段时间,对端仍收不到消息。
    原因:虽然已调用connect, 但在发送消息时,底层的操作系统层的发送可能还没建好,消息直接被丢弃了。
    解决方案:采用PUSH/PULL机制。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值