问题标签 [netmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
299 浏览

c# - NetMQ - 消息仅适用于回复传入消息,不适用于其他端口

在初始化我的路由器应用程序时,我调用以下代码。它绑定得很好,接收消息很好,但拒绝为 On_ReceiveXXX 方法工作,除非它是直接响应。我想知道为什么

这无法调用经销商 ReceiveReady 事件:

私人无效 On_ReceiveFrontEnd(对象发送者,NetMQSocketEventArgs e){ _lastPingResponse = DateTime.Now; var frontEndMsg = e.Socket.ReceiveMultipartBytes(); var streamData = frontEndMsg.Last(); ApplicationMessage msg = PackageHelper.DeserializeOutgoing(streamData); Console.WriteLine(string.Format("收到的命令:{0}", msg.CO));

但是如果我换行

它突然起作用了......所以来自我的前端应用程序的消息只能被响应,而不是传递给后端应用程序。反过来,对于后端消息也是如此。

0 投票
0 回答
1009 浏览

asynchronous - NetMQ - 轮询经销商套接字和超时

我正在使用 DEALER-ROUTER 模式在客户端和工作人员之间进行某种负载平衡。

我想知道如何在客户端和服务器之间设置超时以避免无限等待。

我尝试设置 TryReceiveMultipartMessage 方法的超时参数,但没有效果。我强迫我的服务器在 10 秒后回复,甚至将超时设置为 1 秒,我收到了响应。

我的客户代码是:

如何在从 DEALER 套接字接收消息时设置超时?

谢谢您的帮助。

0 投票
1 回答
921 浏览

c# - 从多个线程访问 NetMQ 套接字

从多个线程访问NetMQ套接字是否安全,只要它们不同时使用它?

例如,
以下场景是否可以:

  1. 线程A使用套接字。
  2. 话题A结束。
  3. 线程B使用相同的套接字。

如果不是,
唯一的操作线程是否必须与创建套接字的线程相同?

0 投票
0 回答
311 浏览

c# - 我可以使用 NetMQ 轮询器发送消息吗?

这是我的场景:

  • 一个应用程序上的多个套接字
  • 我想在任意数量的这些套接字上接收和发送

到目前为止,我发现解决线程问题和奇怪异常的唯一解决方案是:

  • 每个套接字都有自己的线程
  • 每个套接字都有自己的并发队列,它会不断检查是否有消息要发送
  • 要从特定套接字发送,无论线程如何,只需将消息添加到正确的套接字并发队列

但是,这种方法的成本相当高。一般来说,我不是线程的忠实粉丝,我有一种感觉有一种更好的方法。我正在考虑轮询器 - 它允许您从多个套接字接收,而无需为每个套接字创建一个新线程(据我所知)。如果这是正确的,有没有办法让它发送待处理的消息?

否则,多线程是我唯一的选择吗?谢谢

0 投票
0 回答
365 浏览

zeromq - NetMQ PUSH 套接字在到达 HWM 时无限期阻塞

我在 .NET 4.5 上使用 NetMQ (Nuget 3.3.2.2),我有一个带有 PUSH 套接字的快速生成器进程,以及一个使用 PULL 套接字的慢速消费者进程。如果我发送足够多的消息来命中发送 HWM,则发送进程会无限期地阻塞线程。

一些人为的(生成器)代码说明了这个问题:

在我的配置中,这通常会报告它已经发送了大约 5000 或 6000 条消息,然后会简单地阻止。如果我将 send HWM 设置为一个较大的值(或 0),那么它会按预期发送所有消息。

看起来它在再次尝试之前等待接收另一个命令,这里:(SocketBase.TrySend)

从我在 0MQ 指南中读到的内容来看,阻塞一个完整的 PUSH 套接字是正确的行为(也是我希望它做的),但是我希望它在消费者清除其队列后恢复。

没有使用某种 TrySend 模式并自己处理块,是否有一些我可以设置的选项或我可以使用的其他工具来让 PUSH 套接字尝试定期重新发送被阻止的消息?

0 投票
1 回答
337 浏览

zeromq - 什么是 zthread_fork 的 NetMQ 等价物?

我想使用 NetMQ 实现带外快照。zeroMQ (ØMQ) 在“Getting-an-Out-of-Band-Snapshot”部分的“Chapter 5 - Advanced Pub-Sub Patterns”中描述了这个概念。还有一些服务器在CJava中实现这种模式的例子。

C 的 zthread_fork() 函数或 Java 的 ZThread.fork() 方法的NetMQ等效项是什么?

0 投票
2 回答
1704 浏览

c# - NetMq 套接字是线程安全的吗?

我使用私有字段(PushSocket- zmq_push socket for netmq

以及在不同线程中使用此套接字的两种方法

我应该使用lock还是其他同步原语?

0 投票
1 回答
561 浏览

c# - NetMQ/ZMQ C# 消息发送的奇怪延迟

我正在尝试通过 ZeroMQ 发送消息,PublisherSocket但似乎无法正确处理。我尝试了两种不同的方法,但都有自己的问题。

发送帧方法

然后稍后,我会简单地打电话

这就是我期望的工作方式,但问题是我发现有时我在按下 WinForms 应用程序按钮和实际发送消息之间会有明显的延迟。我知道这一点是因为我正在控制一些自定义硬件并且我会立即得到反馈。

轮询器和 SendReady 事件

此方法没有任何延迟,但会导致应用程序使用 100% 的一个 CPU 内核。(50% 双核,25% 四核等)

然后在我的事件处理函数中,我将使用 ConcurrentQueue 来检查是否有任何消息要发送并使用相同的SendFrame方法发送它们。当我想发送消息时,我必须将消息添加到队列中,以便在下次运行时由事件处理程序拾取。

我知道 CPU 使用率的问题是因为SendReady只要可以发送消息,即使无事可做,事件也会一直运行,但在这个特定区域有点缺乏文档。


我不确定我能在这里做什么,理想情况下,我想确定第一种情况下发生延迟的原因,但欢迎使用第二种方法甚至更好的第三种方法来解决 CPU 使用率问题。

0 投票
1 回答
176 浏览

c# - System.ArgumentNullException 与 NetMQ.Msg.Put()


我正在使用 NetMQ 进行进程间数据通信。
我在 .Net 4.5 上使用 NuGet 包版本 3.3.2.2
我想从字符串创建一个简单的消息并将其发送到RequestSocket.

System.ArgumentNullException尽管在任何时候都没有实例为空,但我不断得到。

我的自包含代码:

0 投票
1 回答
448 浏览

zeromq - 0MQ PUSH/PULL Ordering Broken if no PULL Sockets 连接

PUSH/PULL在(Python->C#)中有一个模式0MQ,只有一个PUSH套接字和一个PULL套接字。只要两者都连接,无论worker处理消息需要多长时间,排队消息的顺序都会被保留。

问题是当worker断开一段时间然后重新连接时,那么在此期间排队的所有消息都会以任意随机顺序到达,无论它们是如何被PUSHSocket排队的。这个问题有内置的解决方案还是我应该使用更高级的模式?

我在 PULL 端添加代码: