如何以Xamarin形式设置PUB / SUB NetMQ

时间:2018-10-02 12:42:57

标签: xamarin.forms zeromq netmq

我有一个Windows Services作为发布服务器运行,我正在尝试将Xamarin Forms设置为订户。下面的代码在Console App或LinqPad中可以正常工作,但是当将其复制并粘贴到Xamarin Forms中时,SubscriberSocket不会响应来自服务器的消息。

你知道如何连接吗?

我正在使用NetMQ v 4.0.0.1

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        Task.Run(() => StartPubSubSocketSubscriber());
    }

    private void StartPubSubSocketSubscriber()
    {
        string topic = "TopicA";

        using (var subSocket = new SubscriberSocket())
        {
            subSocket.Options.ReceiveHighWatermark = 1000;
            subSocket.Connect("tcp://192.168.30.120:5556");
            subSocket.Subscribe(topic);

            while (true)
            {
                string messageTopicReceived = subSocket.ReceiveFrameString();
                string messageReceived = subSocket.ReceiveFrameString();

                Device.BeginInvokeOnMainThread(() =>
                {
                    label.Text = messageReceived;
                });
            }
        }
    }
}

我还尝试使用Task.Factory.StartNew(() => StartPubSubSocketSubscriber(), TaskCreationOptions.LongRunning);启动后台线程,但是它对发布者的消息没有响应。

谢谢。

PS .:已删除 subSocket.Connect(“ tcp:// localhost:5556”);

1 个答案:

答案 0 :(得分:0)

解决此问题的过程分为两个步骤:

  1. SubscriberSocket错误地指向localhost。这是一个可以理解的错误,因为仿真器与服务器应用程序在同一台计算机上运行。在虚拟环境或其他设备上运行时,请确保订阅服务器具有明确的IP地址。
  2. SubscriberSocket没有响应的问题实际上是在服务器上。一旦将其更改为pubSocket.Bind("tcp://localhost:5556");,我就用pubSocket.Bind("tcp://*:5556");进行了设置,SubscriberSocket开始响应。这是文档中的错误。

该解决方案的提示来自NetMQ github问题跟踪: https://github.com/zeromq/netmq/issues/747