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

时间:2014-06-03 18:51:12

标签: 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"); 

如何连接3个订阅者。对不起,我阅读了指南,他们说我可以使用我尝试失败的subscriber.Connect

1 个答案:

答案 0 :(得分:3)

根据ZeroMQ documentation

  

除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());
        }
    }
}

这会产生以下输出:

Hello from 5000
Hello from 5001
Hello from 5000
Hello from 5001
[...]