gpt4 book ai didi

sockets - ZeroMQ:如何将消息发送到特定的订户

转载 作者:行者123 更新时间:2023-12-03 11:59:57 27 4
gpt4 key购买 nike

在我的情况下,有n个客户端和1个服务器。客户端将请求发送到服务器并接收响应。此外,还需要一种单向消息传递机制,其中服务器将特定的消息发送到特定的客户端,并且期望没有答案。因此,服务器必须能够使用单向消息传递机制专门处理客户端。

请求-响应部分很简单(REQ和REP套接字),但是我不确定如何实现单向消息传递部分。我尝试使用PUB和SUB套接字,每个订阅者都从服务器请求一个ID,并且仅订阅具有该ID的消息,如下所示:

rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE,
subscriber_id, strlen (subscriber_id));

从理论上讲,这是可行的,但问题是消息全部在客户端进行广播,然后进行过滤,这对我来说不是一个选择。

所以我的问题是:有没有更好的方法来解决特定的客户?

最佳答案

因此,只有两种方法可以做您想做的事,而且都没有直接达到目标的方法-但最后,我提出了一个可能仍然更好的建议。

您直接通过客户端套接字获取服务器套接字地址的要求只能通过以下两种方式来实现:

  • 使用ROUTER套接字。 ROUTER套接字发送的消息的第一帧是目标对等方的套接字ID。它是唯一支持任何类型的常规寻址的套接字类型。
  • 每个对等方向上旋转一个套接字。这样,您就可以在应用程序中处理寻址:知道哪个套接字属于您想要的对等方,然后就可以使用它。

  • 如果需要是单向套接字类型,则第二种方法是唯一剩下的选项。然后,您可以选择任何一种单向通信策略(PUB/SUB,PUSH/PULL),并且只需为每个连接设置一个新的套接字即可。

    我强烈建议使用ROUTER选项,几乎没有理由强制采用单向要求。只需在ROUTER上将接收HWM设置为1,并忽略或丢弃定期发送给它的消息即可。或者,跳过REP/REQ对,仅使用ROUTER/DEALER进行所有操作,这可能是最佳选择。

    关于sockets - ZeroMQ:如何将消息发送到特定的订户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918043/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com