ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 9 Missing Message Problem Solver

2021-09-26 12:34:19  阅读:157  来源: 互联网

标签:Chapter SUB Missing 选译 PUB 如果 ROUTER 接字 连接


Missing Message Problem Solver

 

 下面是这张图表的总结:

在SUB套接字上,使用ZMQ_SUBSCRIBE的zmq_setsockopt()设置订阅,否则将得不到消息。因为您通过前缀订阅消息,如果您订阅“”(空订阅),您将获得所有内容。

如果您在PUB套接字开始发送数据之后启动SUB套接字(即,建立到PUB套接字的连接),您将丢失它在建立连接之前发布的所有数据。如果这是一个问题,请设置您的体系结构,使SUB套接字首先启动,然后PUB套接字开始发布。

即使同步了SUB和PUB套接字,仍然可能会丢失消息。这是因为在实际创建连接之前,不会创建内部队列。如果你可以切换绑定/连接方向,让SUB套接字绑定,PUB套接字连接,你可能会发现它的工作方式更像你期望的。

如果您正在使用REP和REQ套接字,并且没有坚持同步send/recv/send/recv命令,ZeroMQ将报告错误,您可能会忽略这些错误。那样的话,就会显得你在丢失信息。如果您使用REQ或REP,请坚持send/recv顺序,并且始终在实际代码中检查ZeroMQ调用的错误。

如果您正在使用PUSH套接字,您将发现第一个要连接的PULL套接字将获取不公平的消息共享。消息的准确旋转只发生在所有PULL套接字都成功连接时,这可能需要一些毫秒。作为PUSH/PULL的替代方案,为了降低数据速率,可以考虑使用ROUTER/DEALER和负载平衡模式。

如果您正在跨线程共享套接字,请不要这样做。它会导致随机的奇怪,和崩溃。

如果您正在使用inproc,请确保两个套接字处于相同的上下文中。否则,连接端实际上会失效。同样,先绑定,再连接。Inproc不是像tcp那样的断开连接的传输。

如果您正在使用ROUTER套接字,那么通过发送错误的标识帧(或忘记发送标识帧),很容易意外地丢失消息。一般来说,在ROUTER套接字上设置ZMQ_ROUTER_MANDATORY选项是个好主意,但在每次发送调用时也要检查返回代码。

最后,如果您真的不能找出问题出在哪里,那么就做一个重现问题的最小测试用例,并向ZeroMQ社区寻求帮助。

标签:Chapter,SUB,Missing,选译,PUB,如果,ROUTER,接字,连接
来源: https://www.cnblogs.com/usen521/p/15337538.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有