【问题标题】:ZeroMQ / NetMQ: PushSocket.SendFrame not workingZeroMQ / NetMQ:PushSocket.SendFrame 不工作
【发布时间】:2016-06-07 01:55:51
【问题描述】:

我正在尝试使用 NetMQ 发送“即发即弃”类型的消息。我不在乎等待回复。这是用于日志记录的,我更关心性能而不是确定收到我的消息,而且我特别不希望我的 Web 应用程序在日志记录服务器关闭时挂起。此客户端代码位于 Web api 应用程序中,如果这很重要的话。

我的 web api 客户端上有以下代码:

using (var client = new PushSocket(">tcp://localhost:9001"))
{
    client.SendFrame("hello!");
    System.Threading.Thread.Sleep(10);
}

此代码有效。但如果我省略 Thread.Sleep,服务器将永远不会收到消息。这样做的正确方法是什么?我假设它不是 Thread.Sleep。

【问题讨论】:

    标签: asp.net-web-api zeromq netmq


    【解决方案1】:

    ZeroMQ(我假设 NetMQ)“发送”调用是异步的,它们会在消息发送到底层网络层之前返回。 当到达最后一个 '}' 时,您的套接字被破坏,任何尚未发送的消息都将丢失。睡眠会阻止套接字被破坏足够长的时间以允许发送消息。

    理想情况下,您希望在某处构建一个单独的套接字并重复使用它,这样会更快并避免需要睡眠。

    我不是 c# 专家,所以我不知道你会怎么做。

    【讨论】:

      【解决方案2】:

      如果没有 Tread.sleep,您的套接字将在发送之前被销毁。根据应用程序的其余部分,您可以考虑通过将其用作特定于对象的套接字来保持套接字处于活动状态。

      public class foo
      {
           PushSocket client;
           public foo()
           {
               client =  = new PushSocket(">tcp://localhost:9001);
               client.SendFrame("hello!");
           }
      }
      

      只要此 foo 实例保持活动状态,套接字就不会被销毁。 这样你的消息就会被接收到

      【讨论】:

        猜你喜欢
        • 2014-01-03
        • 1970-01-01
        • 2011-09-08
        • 2013-03-13
        • 2013-10-01
        • 1970-01-01
        • 2016-03-05
        • 2011-07-20
        • 2021-12-27
        相关资源
        最近更新 更多