我正在使用pub / Sub Socket并且当前服务器订阅byte [0](所有主题) 客户端订阅字节[16] - 特定标题为主题
但是,我无法阻止客户端订阅可以接收所有其他消息的byte [0]。
我的应用程序就像一个应用程序游戏,它有一个使用ZMQ作为连接的服务器 许多客户都有一个ZMQ套接字与服务器通信。
在这种情况下我应该使用哪种模式或插槽?
由于
答案 0 :(得分:0)
" ... 无法阻止客户端订阅字节[0],可以接收所有其他消息。"
对于ZMQ PUB
/ SUB
正式沟通模式原型, SUB
客户端必须提交它的订阅请求(通过zmq_setsockopt()
)。
PUB
-side(游戏服务器)没有选择从它那边做到这一点。
创建新的SUB
套接字时没有订阅状态,因此是一个绝对限制性的过滤器,没有消息传递。 (有关下面SUBSCRIBE
/ UNSUBSCRIBE
参考的方法的详细信息)
int zmq_setsockopt ( void *socket,
int option_name,
const void *option_value,
size_t option_len
);
Caution: only ZMQ_SUBSCRIBE
ZMQ_UNSUBSCRIBE
ZMQ_LINGER
take effect immediately,
other options are active only for subsequent socket bind/connects.
ZMQ_SUBSCRIBE
:建立邮件过滤器
ZMQ_SUBSCRIBE
选项应在ZMQ_SUB
套接字上建立新的消息过滤器。新创建的ZMQ_SUB
套接字将过滤掉所有传入的消息,因此您应该调用此选项来建立初始消息过滤器。
长度为零的空 option_value
应订阅所有传入的消息。
非空 option_value
将使用指定的前缀订阅所有开头的消息。
可以将多个过滤器附加到单个ZMQ_SUB
套接字,在这种情况下,如果消息与至少一个过滤器匹配,则应接受该消息。
ZMQ_UNSUBSCRIBE
:删除邮件过滤器
ZMQ_UNSUBSCRIBE
选项将删除ZMQ_SUB
套接字上的现有消息过滤器。指定的过滤器必须与先前使用ZMQ_SUBSCRIBE
选项建立的现有过滤器匹配。如果套接字附加了相同过滤器的多个实例,则ZMQ_UNSUBSCRIBE
选项应仅删除一个实例,其余部分保持不变并正常运行。
这可以通过扩展消息传递层并添加控制模式套接字来实现,该套接字将承载客户端ZMQ_SUB
消息过滤的服务器启动设置。
收到服务器指定的新ZMQ_SUBSCRIBE
/ ZMQ_UNSUBSCRIBE
设置后,ZMQ_SUB
客户端代码将只处理该请求并相应地添加zmq_setsockopt()
。< / p>
这种方法的FSA驱动语法具有更多的可能性,因此任何游戏服务器/游戏社区都可以顺利地采用这种方式。
ZeroMQ是一个乐高风格的元素库,可以组合成更大的图像。
期待这样一个聪明的图书馆拥有一个适合所有人的 ninja-element 正在仔细研究 oxymoron 。
所以,要避免&#34; 永无止境的故事&#34;添加&#34; 尽管这......以及...... &#34;
审核所有要求和&amp;端到端可扩展解决方案的列表功能
设计消息传递概念&amp; 验证以满足所有列出的要求&amp;涵盖[1]
实施 [2]
测试 [3]&amp; 正确用于满足1:1的端到端规范[1]
享受它。你已经端到端地完成了它。