1

我有一个作为发布者运行的 Windows 服务,我正在尝试将 Xamarin Forms 设置为订阅者。下面的代码在控制台应用程序或 LinqPad 中运行良好,但是当复制并粘贴到 Xamarin 表单中时,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");

4

1 回答 1

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

于 2018-10-03T01:17:49.220 回答