问题标签 [nanomsg]

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 回答
249 浏览

interprocess - 使用 nngcat 命令行工具的总线示例

nngcat(nng的命令行工具)允许使用 --bus 标志。

我想使用 nngcat 的“--bus”标志将数据从 A1 进程发送到 A2 和 A3 进程。(我知道 pub/sub 和 req/rep 也可以用于此;该工具与它们配合得很好)。启动总线工作:

使用类似下面的方法将 A2 和 A3 连接到总线:

但是现在如何将数据从 A1 发送到 A2 和 A3?使用 --data="my string" 似乎没有预期的结果。

[编辑]:nngcat 属于nng 1.1.1

0 投票
0 回答
314 浏览

c++11 - 为什么 flatbuffers 和 nng 没有副本比双副本慢

我正在使用 flatbuffers 和 nng。使用 FB 我正在创建序列化缓冲区并将其添加到 nng msg。我想消除这种 FB 到 NNG 的复制。

为了实现这一点,我编写了一个自定义分配器,如下所示。

然后将其附加到FB如下

对于双重复制的情况,我像这样使用它

我的期望是无副本会比双副本稍微好一点。但是当我进行测试时,我得到了不同的结果。

所以我想知道这种行为的原因可能是什么?

每个场景运行 20 次以获得平均时间。

0 投票
1 回答
608 浏览

zeromq - gRPC 是否支持 zeromq 或 nanomsg?

根据gRPC.io 网站,我知道 gRPC 支持 http 1.x 和 2.0,但是 zeromq 或 nanomsg 等其他“传输”呢?

0 投票
0 回答
192 浏览

cmake - nanomsg nng 库安装在哪里

我是 nanomsg 和 cmake 的新手。我使用文档安装了 nanomsg

我不确定软件包安装在哪里。我在目录中看到标题/usr/includecmake目录/usr/lib64

由于这种混乱,我无法编译我的示例程序。任何帮助将不胜感激。

0 投票
1 回答
940 浏览

c++ - Nanomsg 具有多线程应用程序的非阻塞双向套接字

我正在使用 Nanomsg 在我的系统中使用 C++ 进行 IPC。我想创建一个后台线程来处理发送和接收的消息。我使用对范式,并使用 nn_poll 检查套接字 fd 是否可写或可读,如果可读则读取;如果可写,则从消息队列中弹出一项并发送。我的问题是我创建的背景线程使用了很多 CPU 使用率,因为 nn_poll 循环中没有睡眠,有没有办法减少 CPU 使用率但仍然像没有睡眠一样使延迟?下面是我的示例代码。谢谢。

服务器.cpp

客户端.cpp

0 投票
1 回答
386 浏览

python-asyncio - pynng:如何在 REP0 套接字上设置并继续使用多个上下文

我正在研究一个“服务器”线程,它负责处理一些“客户端”的 IO 调用。

通信是使用pynng v0.5.0完成的,服务器有自己的asyncio循环。

每个客户端通过发送第一个请求来“注册”,然后循环接收结果并发送回 READY 消息。

在服务器上,目标是将每个客户端的第一条消息视为注册请求,并创建一个专用的工作任务,该任务将循环执行 IO 工作,发送结果并等待该特定客户端的 READY 消息。

为了实现这一点,我试图利用 REP0 套接字的上下文特性。

旁注

  • 我本来想用标记这个问题,但我没有足够的声誉。

  • 虽然我是这个网站的狂热消费者,但这是我的第一个问题 :)

  • 我确实知道 PUB/SUB 模式,假设出于自学目的,我选择不将其用于此服务。

问题:

经过几次迭代,一些 READY 消息被服务器的注册协程拦截,而不是被路由到正确的 worker 任务。

由于我无法共享代码,因此我为我的问题编写了一个复制器并将其包含在下面。

更糟糕的是,正如您在输出中看到的,一些结果消息被发送到错误的客户端 ( ERROR:root:<Worker 1>: worker/client mismatch, exiting.)。

它看起来像一个错误,但我不完全确定我理解如何正确使用上下文,所以任何帮助将不胜感激。

环境:

代码:

输出:

编辑(2020-04-10):将 pynng 和底层 nng.lib 更新到最新版本(主分支),仍然是同样的问题。

0 投票
1 回答
398 浏览

python - nng 到 pynng 的通信不起作用

我正在尝试制作一个通过 nng 发布图像的 c 程序服务器,以及一个通过 pynng 订阅图像的 python 客户端。

出于某种原因,我无法连接这两个部分,我不知道为什么。C/C++ 程序编译和运行良好,python 程序也是如此,但是在 C/C++ 程序上发布了一些内容,在 python 客户端上没有收到任何内容。客户端和服务器在同一台机器上运行。这是我的服务器 C/C++ 代码:

这是我的客户端python代码:

有人可以帮我理解为什么这不起作用吗?

0 投票
1 回答
356 浏览

python - nng 到 pynng 发布/订阅。客户未收到任何消息

我有以下服务器(C++):

以及以下客户端(python):

我不明白为什么没有消息到达客户端。我已经设置了主题和 recv_max_size 但仍然没有消息到达客户端。我现在在这里做错了什么?

0 投票
1 回答
57 浏览

c# - 为什么 nanomsg 会挂起?

我刚开始用 C# 进行 nnanomsg 编程。对于一个简单的客户端/服务器示例,我将从以下示例开始,其中客户端与服务器连接以获取下一个数字。目前,该示例适用于 localhost,但我将网络 IP 地址硬编码以确保其正常工作。可能会有很多客户端连接到服务器,但是这个例子比现实生活中更积极地访问服务器。

客户代码:

服务器代码:

一般来说,当有一个服务器和一个客户端时,这会很好地工作。但是,当我在同一台物理机器上启动第二个客户端时,它们会一起工作一段时间,可能进行 5 到 10 次迭代,然后其中一个客户端(通常是最近启动的那个)挂起。添加延迟(Thread.sleep(5000)例如)稍微改善了这种情况,但它最终会在 50 次迭代后挂起。目前,客户端在显示“已发送”后立即停止。我还没有尝试从网络上的另一台物理机器启动客户端。

此外,我是否在循环中等待ReceiveImmediate()或只是坐在 aReceive()似乎并不重要。

我期望的是每个客户端都有机会向服务器发送请求并得到回复。确切的顺序并不重要,只要服务器最终响应客户端的请求即可。

我想了解它为什么挂起。我有最新版本的 DLL,1.1.5。

非常感谢您的每一点帮助。

0 投票
2 回答
221 浏览

go - mangos的问题——Golang包提供的nanomsg总线协议

我想用nanomsg/nng作为一个完全分布式的点对点多节点网络的通信基础,帮助构建拓扑发现和维护的动态能力。现在我陷入了它的 Golang 包mangos中。

在 Python 和 pynng(它是 nanomsg 的 python 绑定)中已经完成了相同的工作,但是当我使用 Go 并通过 mangos 调用相应的方法时,它们的行为完全不同。谜题主要有三方面:

  1. bus-type-Socket 的 Recv() 默认情况下以阻塞模式运行,似乎不能配置为非阻塞模式。文件说:

OptionRecvDeadline 是直到下一个 Recv 超时的时间。该值是时间。持续时间。可以传递零值以指示不应应用超时。负值表示非阻塞操作。默认情况下没有超时。

我相应地尝试了一个负值,但Recv()仍然阻塞。我还应该做什么?以及如何理解“零超时”和“非阻塞”之间的区别?

  1. dialer返回的 by似乎(s *socket) NewDialer(...)在调用之后会徘徊dialer.Close(),因为调用下一个报告时会发生错误,dialer.Dial()它仍然是“正在使用的地址”。但是当我再次尝试Close()dialer,会发生错误并报告它已经关闭。我还尝试了以下选项的不同组合,但所有尝试都失败了

当我想完全杀死拨号器,或者想在一段时间后重用“伪关闭”拨号器时,我应该怎么做?

  1. 总线类型的套接字Send()很奇怪。通常每个节点都应该定期在我的代码中发送一条消息。我从网络中关闭了一个节点(比如“Node-X”)的物理连接,使其离线一段时间,然后将其重新连接到网络。我发现 Node-X 重新连接后会立即重新发送大量消息。但我真正期望的是 Node-X 可以将这些消息发送到空中,即使它没有邻居。

我想知道是否有任何方法可以解决这些问题。我想它可能缺少一些选项或配置,但我没有弄清楚它们。

以下代码用于重现重新拨号和重新关闭错误。

和控制台输出是