1
nanomsgのC#データバインディングを使用しています。私は、外部のプログラムがURLをipc:// report_dataにGoogle Protocol Bufferメッセージを送信していると私のサブスクライバは、同じ正確なURLに接続します。だから、私は加入者がそのURLで送信されているデータを取得できると期待していますが、そうではありません。私は関数Receive()を使用して、これまでに何も来ることはありません。そのURLには1つのタイプのメッセージしかないので、そのトピックについて心配していません。 nanomsgの経験を持つ人は、トピックに関係なく、転送URLに入ってくるデータをどのように読むのか知っていますか?nanomsgを使用するパブリッシャからのデータの購読/受信。
これは私の加入者および受信メッセージのためのコードです:
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;
}
なぜあなたは 'sw.Elapsed.TotalSeconds%3 == 0'をやっていますか? 'sw.Elapsed.TotalSeconds'は' double'なので、そのようなモジュラスを行うことは '0'になるという保証はありません。 「新しいデータをチェックしています」というメッセージが表示されますか? – Enigmativity