C# 订阅者/使用nanomsg从发布者接收数据。

C# 订阅者/使用nanomsg从发布者接收数据。,c#,protocol-buffers,nanomsg,C#,Protocol Buffers,Nanomsg,我正在使用C#数据绑定进行数据绑定。我有一个在url上发送消息的外部程序ipc://report_data 我的订户连接到同一个url。因此,我希望我的订户能够检索在该url上发送的任何数据,但事实并非如此。我使用函数Receive(),但没有任何结果。这个URL上只有一种类型的消息,所以我不关心这个主题。有nanomsg经验的人是否知道如何读取传输url上的任何数据,而不考虑主题 这是我的订户和接收消息的代码: public static void CreateSubscriber(strin

我正在使用C#数据绑定进行数据绑定。我有一个在url上发送消息的外部程序ipc://report_data 我的订户连接到同一个url。因此,我希望我的订户能够检索在该url上发送的任何数据,但事实并非如此。我使用函数Receive(),但没有任何结果。这个URL上只有一种类型的消息,所以我不关心这个主题。有nanomsg经验的人是否知道如何读取传输url上的任何数据,而不考虑主题

这是我的订户和接收消息的代码:

public static void CreateSubscriber(string url, string topic)
{
    Console.WriteLine("\nCreating new subscriber with topic {0} and url {1}.", topic, url);

    var subscriber = new SubscribeSocket();

    subscriber.Connect(url);
    var sw = Stopwatch.StartNew();

    while (sw.Elapsed.TotalSeconds < 5000)
    {
        if (sw.Elapsed.TotalSeconds % 3 == 0)
        {
            Console.WriteLine("Checking for new data.");
            var streamOutput = ReceiveProtoBufferMessage(subscriber, topic);
        }
    }
    sw.Stop();
    Thread.Sleep(1);
    Console.WriteLine("Disposing subscriber.");
    subscriber.Dispose();
}

static byte[] ReceiveProtoBufferMessage(SubscribeSocket s, string topic)
{
    byte[] data = null;

    try
    {
        data = s.Receive();
        Console.WriteLine("Received data.");
    }
    catch
    {
        Console.WriteLine("Couldn't receive data.");
    }

    if (data != null)
    {
        Console.WriteLine("Data is not null.");
    }
    else
    {
        Console.WriteLine("Null data");
    }

    return data;
}
publicstaticvoidcreatesubscriber(字符串url,字符串主题)
{
WriteLine(“\n正在创建主题为{0}和url为{1}的新订户”,主题为,url);
var subscriber=newsubscribesocket();
连接(url);
var sw=Stopwatch.StartNew();
同时(sw.Essed.TotalSeconds<5000)
{
如果(sw.eassed.TotalSeconds%3==0)
{
WriteLine(“检查新数据”);
var streamOutput=ReceiveProtoBufferMessage(订户,主题);
}
}
sw.Stop();
睡眠(1);
控制台.WriteLine(“处理订户”);
subscriber.Dispose();
}
静态字节[]ReceiveProtoBufferMessage(订阅套接字,字符串主题)
{
字节[]数据=null;
尝试
{
data=s.Receive();
Console.WriteLine(“接收到的数据”);
}
抓住
{
WriteLine(“无法接收数据”);
}
如果(数据!=null)
{
WriteLine(“数据不为null”);
}
其他的
{
Console.WriteLine(“空数据”);
}
返回数据;
}

找到了答案-为了让订阅者接收所有消息,我让订阅者订阅了一个空字符串主题:“”

找到了答案-为了让订阅者接收所有消息,我让订阅者订阅了一个空字符串主题:“”

为什么要执行
sw.appeased.TotalSeconds%3==0
sw.appeated.TotalSeconds
是一个
双精度
,因此不能保证这样做的模数永远是
0
。“检查新数据。”消息是否显示过?为什么要执行
sw.eassed.TotalSeconds%3==0
sw.appeated.TotalSeconds
是一个
双精度
,因此不能保证这样做的模数永远是
0
。“检查新数据。”消息是否显示过?