ZMQ 的 Pub-Sub 框架。如何连接到多个端口

use*_*315 0 c# zeromq

假设有三个(可以是任意数量)发布者(在不同的 Exe 上运行),它们分别发布到 127.0.0.1:1234,127.0.0.1:1235,127.0.0.1:1236。

目前,我可以使用以下方式连接 Pub-Sub

subscriber.Connect("tcp://127.0.0.1:22223"); 
Run Code Online (Sandbox Code Playgroud)

我如何才能连接到 3 个订阅者。抱歉,我阅读了指南,他们说我可以使用订阅者来做到这一点。我尝试失败

TC.*_*TC. 6

根据ZeroMQ 文档

除了 ZMQ_PAIR 套接字之外,单个套接字可以使用 zmq_connect() 连接到多个端点,同时使用 zmq_bind() 接受来自绑定到套接字的多个端点的传入连接。

所以这应该是可能的,如果不是,可能是由于您正在使用的实现存在问题。以下使用NetMQ 的示例对我有用:

private static NetMQContext _context = NetMQContext.Create();

public static void Main(string[] args)
{
    Thread publish1 = new Thread(() => Publish(5000));
    Thread publish2 = new Thread(() => Publish(5001));

    publish1.Start();
    publish2.Start();

    Subscribe();
}

private static void Publish(ushort port)
{
    using (NetMQSocket socket = _context.CreatePublisherSocket())
    {
        socket.Bind("tcp://127.0.0.1:" + port);

        while (true)
        {
            socket.Send("Hello from " + port);
            Thread.Sleep(1000);
        }
    }
}

private static void Subscribe()
{
    using (NetMQSocket socket = _context.CreateSubscriberSocket())
    {
        socket.Connect("tcp://127.0.0.1:5000");
        socket.Connect("tcp://127.0.0.1:5001");
        socket.Subscribe("");

        while (true)
        {
            Console.WriteLine(socket.ReceiveString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Hello from 5000
Hello from 5001
Hello from 5000
Hello from 5001
[...]
Run Code Online (Sandbox Code Playgroud)