问题标签 [pgm-protocol]

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 投票
2 回答
779 浏览

java - 将 JZMQ 与 EPGM 传输一起使用不会发送或接收数据

我正在尝试使用 java 风格的 zmq 来测试在我的项目中使用 PGM over TCP 的好处。因此,我将 zmq 指南中的天气示例更改为使用 epgm 传输。一切都编译并运行,但没有发送或接收任何内容。如果我将传输改回 TCP,服务器会接收到客户端发送的消息,并且我会得到我期望的控制台输出。

那么,使用 PGM 有哪些要求呢?我更改了传递给绑定和连接方法的字符串,以遵循 zmq_pgm 的 zmq api:“transport://interface;multicast address:port”。那没有用。每当我尝试使用这种格式时,都会出现无效参数错误。因此,我通过删除“有效”的界面和分号来简化它,但我没有得到任何结果。

我找不到使用 pgm/epgm 的 jzmq 示例,并且 java 绑定的 api 文档没有为传递给绑定或连接的端点定义适当的字符串格式。那么我在这里错过了什么?我必须为客户端和服务器使用不同的主机吗?

需要注意的一点是,我在 VirtualBox VM(Ubuntu 14.04/OSX Mavericks 主机)上运行我的代码。我不确定这是否与我目前面临的问题有关。

服务器:

客户:

0 投票
1 回答
1918 浏览

c# - 向 iSeries Socket (AS400) C# 发送和接收数据

我正在尝试开发一个通过套接字连接到 iSeries(as400 - PGM 程序)的类。连接工作正常,但是当我尝试发送和接收数据时出现错误。

这是代码:

有什么问题?

0 投票
2 回答
682 浏览

zeromq - PGM 接收非常慢导致消息被丢弃?

我正在研究 ZeroMQ 的 PGM 支持。使用 NetMQ 库在 Windows 上运行(在以 MacOS 作为主机的 VirtualBox 中)。

我要做的测试很简单:尽可能快地从 A 向 B 发送消息......

首先,我使用 TCP 作为传输;这很容易达到每秒超​​过 150 000 条消息,两个接收器保持同步。然后我想测试PGM;我所做的只是在两边用“pgm://239.0.0.1:5557”替换地址“tcp://*:5556”。

现在,PGM 测试给出了非常奇怪的结果:发件人轻松达到 >200 000 条消息/秒;但是,接收者只能处理大约 500 条消息/秒!?

所以,我不明白发生了什么。在减慢发送者的速度后(每条消息后睡眠 10 毫秒,否则实际上不可能调查流),在我看来,接收者正在努力跟上,最初看到每条消息经过,然后窒息,错过了一系列消息,然后尝试再次跟上...我使用了 HWM 和恢复间隔设置,但这似乎没有太大区别(?!)。

谁能解释发生了什么?

非常感谢,弗雷德里克

注意:不确定是否重要:据我了解,我不使用 OpenPGM - 我只是下载 ZeroMQ 设置,并在 Windows 中启用“多播支持”。

这是发件人代码:

和接收方:

0 投票
1 回答
951 浏览

udp - 使用 epgm 配置 zeromq pub/sub 以实现低延迟实时消息

我搜索了一下,了解到不可靠的 udp 单播不是 zeromq 支持的协议。有一个未解决的问题,UDP support #807,但没有真正的活动。所以我的问题是:如何使用 epgm(或 pgm)协议配置 zeromq pub/sub 以接近传统的 udp 单播性能(和行为)?

我问这个问题的原因是双重的。首先,在我的实时系统中,我以相当高的速度发布消息。如果一条消息没有传递,重新发送它比丢弃它并发送下一条更糟糕。其次,在我的系统中还有许多其他使用 zeromq 通信模式的用例。另外,即使在这种情况下,也存在需要传统 zeromq tcp pub/sup 的用例。在我的整个系统中使用 zeromq 很有意义,所以我想在这种情况下也使用 zeromq,而不必滚动我自己的 udp 实现。(我是 zeromq 新手,不是网络编程专家,所以我将 udp 添加到 zeromq 超出了范围。)

由于 udp 不是 zeromq 中的当前协议,我如何通过为 epgm pub/sub 设置正确的选项来近似所需的通信?

我很感激任何反馈。

0 投票
2 回答
2635 浏览

c++ - ZeroMQ:使用 EPGM 传输

我试图epgm在我的简单发布者 - 订阅者程序中使用传输,但我无法这样做。据我了解,我无法在bindconnect语句中提供正确的地址字符串。

发布者和订阅者可以在相同或不同的机器上运行。

tcp以下是使用传输并正常工作的必需代码。它使用cppzmqhttps ://github.com/zeromq/cppzmq 。

发布者代码:

订阅者代码:

krecv订阅者中使用的方法:

我尝试将bind发布者中的声明更改为以下内容:

  1. publisher.bind("epgm://10.1.1.8:5000");
  2. publisher.bind("epgm://224.1.1.1:5000");
  3. publisher.bind("epgm://eth0;224.1.1.1:5000");
  4. publisher.bind("epgm://10.1.1.8;224.1.1.1:5000");
  5. publisher.bind("epgm://localhost:5000");

对于所有 5 种情况,程序都以Assertion failed: false (src/pgm_socket.cpp:165). 对于第 5 种情况 ( epgm://localhost:5000),我还会收到以下警告以及崩溃:

我该如何解决这个问题?我猜发布者和订阅者的地址更改将相同?

我正在libpgm 5.2.122使用zeromq-4.1.3.

注意机器有以下接口:

  1. eth0(以太网)--inet 地址:10.1.1.8
  2. ib0(InfiniBand) -- inet 地址:10.1.3.8
  3. lo(本地环回)--inet 地址:127.0.0.1
0 投票
2 回答
580 浏览

windows - ZeroMQ 的 EPGM 在天气 PUB-SUB 演示中不起作用

我已经用openpgm编译了libzmq,在windows下没有任何变化。此处的代码取自ZeroMQ 指南(“天气发布者”服务器/客户端)。但是,如果我将“tcp”更改为“epgm”,它将不再起作用(未收到数据,但已建立连接)。

我在不同的线程中运行两个函数,使用 tcp 一切都按预期工作。

我尝试使用 cmd.exe 执行“路由打印 0.0.0.0”,并使用接口 IP(192.168.137.64)作为前缀,而不是像 RFC 中所示的“eth0”:epgm://192.168.137.64;127.0.0.1:5556 on连接和/或绑定,但这会破坏我的套接字并引发错误。

“PGM”也需要管理员权限,我现在无法测试。

错误不是“不支持协议” errno 设置为 B (11),我不明白这是什么意思(上面没有文档)。

0 投票
0 回答
46 浏览

zeromq - zeromq pgm 不可恢复数据检测

我正在开发一个系统,其中每个节点都有一个 PUB 和一个 SUB。如果其中一个节点断开连接很长时间,它应该能够从数据更安全的存储中检索数据,例如网络中某处的数据库。通信通过 ePGM 协议进行。

据我所知,PGM 能够检测到不可恢复的数据丢失。从 zeromq 似乎有一个监视功能,但是,从我在文档中得到的,它看起来好像只能监视面向连接的协议。

是否有办法“挂钩”到这个“不可恢复的数据”事件或从 zeromq 获取断开/重新连接事件?

0 投票
1 回答
471 浏览

networking - 如何使用 tcpreplay 重放 PGM 协议的网络流量?

我想将网络流量多播到特定的多播目标 IP 地址。在输入 pcap 文件中,PGM 协议数据包可用。

我正在执行以下 tcpreplay 步骤以通过网络多播 pcap 文件-

  1. 重写 pcap 文件中可用的目标和源 mac 地址

    tcprewrite --enet-dmac=目标 Mac 地址 --enet-smac=源 Mac 地址 --infile=input.pcap --outfile=output.pcap

  2. 获取缓存文件,在重写 IP 地址时使用。

    tcpprep --auto=bridge --pcap=output.pcap --cachefile=input.cache

  3. 重写 IP 地址

    tcprewrite --endpoints=目标多播 IP 地址:源接口 IP 地址 --cachefile=input.cache --infile=output.pcap --outfile=newoutput.pcap

  4. 最后多播newoutput.pcap。

    sudo tcpreplay --mbps=2.0 --intf1=eth0 newoutput.pcap

但在第 1 步中,我面临以下错误 -

tcprewrite.c:post_args() 第 225 行中的警告:使用 9216 字节的 snaplen 捕获了 testsg.pcap。这可能意味着您截断了数据包。

另一方面,我正在尝试使用以下命令进行捕获-

tcpdump -n "dst host 目标多播 IP 地址和 dst port 目标端口号"

但即使是一个数据包也不会在另一侧被捕获。

以前我正在发送 UDP 协议捕获 pcap 文件,当时我正在正确获取所有数据包。

现在我无法理解与 PGM 数据包相关的问题是什么,以及为什么这些数据包没有在另一端被捕获。如何使用目标多播 IP 地址在网络上成功重播这些网络流量?

0 投票
1 回答
2311 浏览

visual-studio - 错误 MSB6006:“cmd.exe”以代码 2 退出 - 在 Visual Studio 2010 中

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: "cmd.exe" exited with code 2.

即使项目属性中没有配置更改,Visual Studio 2010 IDE(x64/win32-Release/Debug)也面临问题。

我发现之前提出过同样的问题,但没有答案

仅供参考:此问题仅在使用 VS2010 解决方案构建 openPGM 库时发生。OpenPGM VS2010 解决方案和项目文件是使用 cmake 生成的。

0 投票
1 回答
356 浏览

c++ - ZeroMQ PGM 多播不支持来自应用层的回复处理?

我已经完成了一个示例 ZeroMQ PGM 多播应用程序,它工作正常。

但是回复处理不起作用。这是正确的方法吗?
如果是 - 如何从接收方回复发送方?

发件人:

接收者: