3

我正在尝试实现 NetMQ Pub/Sub 模型,但订阅者没有收到任何消息。这里可能有什么问题?

  private static void ServerTask()
    {
        using (var context = NetMQContext.Create())
        {
            using (var socket = context.CreateSubscriberSocket())
            {
                socket.Bind("tcp://10.120.19.109:5000");
                socket.Subscribe(string.Empty);

                while (true)
                {
                    Thread.Sleep(100);
                    string receivedMessage = socket.ReceiveString();
                    Console.WriteLine("Received: " + receivedMessage);
                }
            }
        }
    }

     public static void ClientTask()
    {
        using (NetMQContext ctx = NetMQContext.Create())
        {
            using (var socket = ctx.CreatePublisherSocket())
            {
                socket.Connect("tcp://10.120.19.109:5000");

                string obj = "hi";
                socket.Send(obj);
            }
        }
    }

两者都在不同的应用程序中。

4

2 回答 2

4

如果您是 NetMQ 新手,我建议您阅读 zeromq 指南http://zguide.zeromq.org/page:all

底线是您在订阅者发送订阅之前发送消息。

zeromq 和 NetMQ 中的 Pubsub 就像收音机一样,您只会从开始收听的那一刻起收到消息。

简单的方法(不是现实生活中的解决方案)是在连接后休眠一段时间。

对于现实生活中的解决方案,我需要了解您要实现的目标

于 2014-08-13T13:49:43.393 回答
0

问题就像

        using (NetMQContext ctx = NetMQContext.Create())
        {
            using (var publisher = ctx.CreatePushSocket())
            {

                publisher.Bind("tcp://localhost:5000");

                int i = 0;
                while (true)
                {
                    try
                    {

                        publisher.Send(i.ToString(), dontWait:true);
                        Console.WriteLine(i.ToString());
                    }
                    catch (Exception e)
                    {

                    }
                    finally
                    {
                        i++;
                    }

            }
        }

现在,此代码有效。但是,如果我将 while(true) 循环移到外面。并从其他函数调用此代码,该函数每次都强制将推送套接字和上下文创建为新的......这不起作用。

于 2014-08-22T06:17:33.760 回答