问题标签 [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.
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 主机)上运行我的代码。我不确定这是否与我目前面临的问题有关。
服务器:
客户:
c# - 向 iSeries Socket (AS400) C# 发送和接收数据
我正在尝试开发一个通过套接字连接到 iSeries(as400 - PGM 程序)的类。连接工作正常,但是当我尝试发送和接收数据时出现错误。
这是代码:
有什么问题?
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 中启用“多播支持”。
这是发件人代码:
和接收方:
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 设置正确的选项来近似所需的通信?
我很感激任何反馈。
c++ - ZeroMQ:使用 EPGM 传输
我试图epgm
在我的简单发布者 - 订阅者程序中使用传输,但我无法这样做。据我了解,我无法在bind
和connect
语句中提供正确的地址字符串。
发布者和订阅者可以在相同或不同的机器上运行。
tcp
以下是使用传输并正常工作的必需代码。它使用cppzmq
:https ://github.com/zeromq/cppzmq 。
发布者代码:
订阅者代码:
krecv
订阅者中使用的方法:
我尝试将bind
发布者中的声明更改为以下内容:
publisher.bind("epgm://10.1.1.8:5000");
publisher.bind("epgm://224.1.1.1:5000");
publisher.bind("epgm://eth0;224.1.1.1:5000");
publisher.bind("epgm://10.1.1.8;224.1.1.1:5000");
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
.
注意机器有以下接口:
eth0
(以太网)--inet 地址:10.1.1.8
ib0
(InfiniBand) -- inet 地址:10.1.3.8
lo
(本地环回)--inet 地址:127.0.0.1
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),我不明白这是什么意思(上面没有文档)。
zeromq - zeromq pgm 不可恢复数据检测
我正在开发一个系统,其中每个节点都有一个 PUB 和一个 SUB。如果其中一个节点断开连接很长时间,它应该能够从数据更安全的存储中检索数据,例如网络中某处的数据库。通信通过 ePGM 协议进行。
据我所知,PGM 能够检测到不可恢复的数据丢失。从 zeromq 似乎有一个监视功能,但是,从我在文档中得到的,它看起来好像只能监视面向连接的协议。
是否有办法“挂钩”到这个“不可恢复的数据”事件或从 zeromq 获取断开/重新连接事件?
networking - 如何使用 tcpreplay 重放 PGM 协议的网络流量?
我想将网络流量多播到特定的多播目标 IP 地址。在输入 pcap 文件中,PGM 协议数据包可用。
我正在执行以下 tcpreplay 步骤以通过网络多播 pcap 文件-
重写 pcap 文件中可用的目标和源 mac 地址
tcprewrite --enet-dmac=目标 Mac 地址 --enet-smac=源 Mac 地址 --infile=input.pcap --outfile=output.pcap
获取缓存文件,在重写 IP 地址时使用。
tcpprep --auto=bridge --pcap=output.pcap --cachefile=input.cache
重写 IP 地址
tcprewrite --endpoints=目标多播 IP 地址:源接口 IP 地址 --cachefile=input.cache --infile=output.pcap --outfile=newoutput.pcap
最后多播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 地址在网络上成功重播这些网络流量?
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 生成的。
c++ - ZeroMQ PGM 多播不支持来自应用层的回复处理?
我已经完成了一个示例 ZeroMQ PGM 多播应用程序,它工作正常。
但是回复处理不起作用。这是正确的方法吗?
如果是 - 如何从接收方回复发送方?
发件人:
接收者: