问题标签 [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 回答
186 浏览

zeromq - 在多个轮询器之间拆分工作?

我目前在服务器端工作的设置是这样的——我有一个经理(带有轮询器),它等待传入的工作请求。一旦收到东西,它就会为工作创建工作人员(带有单独的轮询器和单独的端口/套接字),然后工作人员直接与客户端通信。

我观察到,当任何一个工作人员有一些繁忙的流量时,它会在某种程度上禁用管理器——ReceiveReady事件的触发有很大的延迟。

NetMQ 文档指出“使用轮询器接收消息比直接在套接字上调用 Receive 方法要慢。当每秒处理数千条或更多消息时,轮询器可能成为瓶颈。” 我远远低于这个限制(比如连续 100 条消息),但我想知道在单个程序中有多个轮询器是否不会进一步降低性能。

我更喜欢有单独的实例,因为代码更干净(关注点分离),但也许我违背了 ZeroMQ 的原则?问题是——在单个程序性能中使用多个轮询器是否明智?或者反过来——多个轮询器是否故意让彼此挨饿?

0 投票
1 回答
598 浏览

c# - 如何调试“无法关闭未初始化的消息”FaultException?

由于“无法关闭未初始化的消息”未处理的异常,我的应用程序崩溃。这可能是由于从多个线程访问套接字。

我在调试这个问题时遇到了问题,因为当我查看我的代码时,所有对套接字的访问都是在轮询线程中完成的——ReceiveReady直接在事件处理程序中(根据我的理解,它在轮询线程上运行)或手动创建的Tasknew Task(...))和然后在轮询线程 ( task.Start(poller)) 上启动。所以我看不到可能发生这种情况的地方。

第二个问题是它是未处理的异常——我将所有发送/接收包装在 try-catch 中,但异常发生在外面的某个地方。

我正在寻找如何有效调试它并查明代码中行为不端的位置的方法。


代码示例——正如我所写的,我只使用了两个“模式”:

直接使用 poller 线程(感谢 poller 线程上触发的事件):

从任意线程切换到 poller 的线程:

0 投票
1 回答
491 浏览

sockets - 有没有办法使用 TCP keepalive 作为事件?

由于我使用 TCP 进行连接,所以我想知道是否可以使用 keep-alive 信号作为我的应用程序的通知源。即我想在客户端和服务器端检测断开状态(对于给定的套接字)。

可能吗?如果是 - 怎么做?到目前为止,我找到了设置保持活动间隔和Monitor方法的选项,但我没有看到如何从中发出通知的方法。

在服务器端,我当然想知道哪个客户端死了。

0 投票
1 回答
214 浏览

c# - NetMQ 重用同一个套接字

是否可以在同一端口上启动例如 2 个发布者,或者例如同时启动发布者和订阅者(​​都具有 >tcp:// 前缀)?

0 投票
0 回答
1282 浏览

c# - 使用 NetMQ“Realiable Pub/Sub”模式启用客户端与服务器对话

我有一个 Somdron 的“Reliable Pub-Sub”模式的 v4.0.0.1 实现,用于在新应用程序的两个部分之间进行通信。该应用程序将有一个“服务器”(执行所有繁重计算的引擎)和“客户端”,它们将发送请求并从服务器获取有关进度的信息。

我当前版本的“Reliable Pub-Sub”的问题是我似乎没有正确的方法将请求从客户端发送到服务器。让我首先向您展示代码:

服务器:

客户:

现在,我可以在两个单独的控制台应用程序中使用 main 方法中的以下代码将消息从服​​务器发送到客户端,这很棒,客户端

SERVER 的 Program.cs:

客户的 Program.cs:

客户端正确地自动检测断开的连接并重新连接,奇妙的小模式。

但是,这种开箱即用的模式不允许客户端向服务器发送消息。所以在客户端我添加了以下代码

在客户端中,我已将publisher.ReceiveReady += DropPublisherSubscriptions;事件处理程序更改为

但这似乎无法处理我的消息。它接收心跳和欢迎消息,但我做的不对。

我怎样才能启用/促进客户端与服务器交谈而不破坏我已经拥有的东西?

谢谢你的时间。

0 投票
1 回答
92 浏览

c# - IQbservable<> 需要已经在项目中组装

使用一个以.Net 4.5为目标的项目,我有一段代码可以做到这一点

但是,它抱怨我需要System.Reactive.Interfaces, Version=3.0.0.0 即使该程序集已添加到项目中?

/home/idf/Documents/csharp/NetMQObs/TestNetMQ/TestNetMQ/Program.cs(25,25):错误 CS0012:类型“IQbservable<>”在未引用的程序集中定义。您必须添加对程序集“System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263”的引用。(CS0012) (TestNetMQ)

按照下面的建议添加 2.2.5 版本后,现在我收到此错误。将调用更改为ReceiveFrameString编译,但 YMMV。

0 投票
1 回答
87 浏览

system.reactive - 如何避免处置 SubscriberSocket

这个实现很糟糕,因为它会disposingSubscriberSocket第一个订阅终止时结束。当我运行它时,似乎什么都没有发布。[这使用 Rx 3.0.0]

如何修改Receive函数来解决这个问题?

0 投票
0 回答
270 浏览

c# - 如何从 StringBuilder 自动填充下拉列表

我正在使用 NetMQ 远程处理设备。它是一个基于服务器/客户端的架构。我用 WPF 和 Xaml 实现了一个 GUI,它让我可以将命令作为字符串发送,也可以将答案作为字符串接收。主机应用程序有一个Dictionary<int, cmdStruct> ListOfCommands(). int 是一个 ID,cmdStruct 是一个定义命令结构的类,即string cmdTextstring cmdHelpTextdelegate cmdAction.

当我发送命令“列表”时,它应该显示字典中的所有命令,我使用它的键和值访问它以仅显示 ID、cmdText 和 cmdHelpText。然后我将它们放入stringBuilderusing append 中。

除非我尝试将 ListBox 更改为 ComboBox (a DropDownList) 以在其上显示所有可用命令,否则这里一切正常。但问题是它不起作用。我得到了垂直列出的命令,而不是水平列出的命令。

0 投票
1 回答
168 浏览

c++ - ZMQ 请求发送保证

如果在使用 REQ / REP 套接字时,我在指南或 RFC 中找不到任何地方,假设我通过 REQ 套接字成功发送消息,它是否保证 REP 套接字收到消息?

如果不是,当 REP 套接字上的 recv 调用未阻塞(根据 RFC)时,如何使用超时引入单个客户端/服务器可靠性。

0 投票
2 回答
549 浏览

azure - Need a ZeroMQ implementation of an ICommunicationListener on Azure Service Fabric

I am looking for a ZeroMQ implementation of an ICommunicationListener that I can use with a service fabric to run a ZeroMQ endpoint on Azure.

I looked for hours and I can't find any. Does anyone know a solution for this? I currently use the "Service App Fabric / .net core 2.0 stateless service" template,
which allows me to override
IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners(),
when I have the ICommunicationListener implementation for ZeroMQ,
or to override a Task RunAsync(CancellationToken cancellationToken),
when I want to setup the sockets myself.

My first try won't work:

Result of the above is a service that won't start. Can't find much logging except this:

"There was an error during CodePackage activation.The service host terminated with exit code:255"