Tag: zeromq

如何识别NetMQ中传入连接的物理地址?

在NetMQ的路由器经销商示例中 ,我们看到客户可以设置自己的身份。 这对于日志记录非常有用。 但是,如果我只控制服务器(路由器)的代码而不是客户端(代理商)的代码呢? 如果某些客户端不想以对我的服务器有意义的方式设置身份,该怎么办? 当客户端没有在消息或身份中明确地将其提供给我时,如何在我的日志中包含物理地址? 如果您只根据ZeroMQ的其他实现知道答案,我将有兴趣听到它,但最终我想要一些可以在NetMQ中完成的东西。

如何对静态图片流(video)进行动态编码,以便将这些从C#发送到Python?

我使用Kinect SDK( C# )从Kinect 2获得Depth和Color帧,然后使用ZeroMQ将它们发送给Python客户端。 this.shorts = new ushort[ 217088]; // 512 * 424 this.depthBytes = new Byte[ 434176]; // 512 * 424 * 2 this.colorBytes = new Byte[4147200]; // 1920 * 1080 * 4 public void SendDepthFrame(DepthFrame depthFrame) { depthFrame.CopyFrameDataToArray(this.shorts); Buffer.BlockCopy(shorts, 0, this.depthBytes, 0, this.depthBytes.Length); this.depthPublisher.SendByteArray(this.depthBytes); } public void SendColorFrame(ColorFrame colorFrame, WriteableBitmap map) { […]

有没有办法实现ZeroMQ fullduplex通道?

该项目是通过ZeroMQ在Python和C#程序之间构建消息传递机制。 我希望消息能够随时从两端进出,这不是基本的请求 – 回复模型,也就是REQ/REP 。 我能想到的一种方法是在两个端口上构建PUB/SUB模型,即两个单向通道。 有没有办法获得真正的双工通道?

msgpack可以在C#中打包用户定义的对象,将包发送到C ++应用程序然后解压缩吗?

我有一个C#reply服务器,可以打包一个对象并将其发送给请求者C#客户端。 我可以做同样的事情,但是C#reply服务器与C ++请求者客户端进行通信吗? 这是我的C#回复服务器的一个例子: using System; using System.Text; using ZMQ; using MsgPack; namespace zmqMpRep { public class Weather { public int zipcode; public int temperature; public int humidity; } public class zmqMpRep { public static void Main(string[] args) { Socket replier = new Socket( SocketType.REP ); replier.Bind( “tcp://127.0.0.1:9293” ); while( true ) { Weather weather […]

等待连接的正确方法是什么?

我正在尝试使用NetMQ实现在两个应用程序之间传递的简单消息(稍微更详细地描述了我想要实现的内容)。 经过一些试验和错误后,我发现在Connect / Bind调用之后我不能立即发送或接收消息,因为它们是非阻塞的,即使尚未建立连接也会实际返回。 现在我用Thread.Sleep()解决了这个问题,但这对它有不好的品味,对于生产系统来说绝对不行。 所以问题是,如何在NetMQ / ZeroMQ中做到这一点? 客户端示例: using (NetMQContext ctx = NetMQContext.Create()) { using (var client = ctx.CreatePushSocket()) { client.Connect(“tcp://127.0.0.1:5555”); Thread.Sleep(100); // wait for connection for (int i = 0; i < 5; i++) { client.Send("test " + i , true); } } } } 服务器示例: using (NetMQContext ctx = NetMQContext.Create()) { using […]

尝试使用ZeroMQ构建分布式爬网程序

我刚刚开始学习ZeroMQ,并希望在学习的同时构建一个分布式webcrawler作为示例。 我的想法是有一个用PHP编写的“服务器”,它接受一个应该开始爬行的URL。 Worker(C#cli)必须抓取该URL,提取链接,并将它们推回到服务器上的堆栈中。 服务器不断将堆栈中的URL发送给工作人员。 也许redis会跟踪所有已爬网的url,因此我们不会多次抓取网站,并且能够提取当前进程的统计信息。 我想让服务器均匀地分配任务,注意新的/缺少的工作人员,并在工人没有响应时重新分配URL。 为什么PHP服务器:我对PHP非常熟悉,就是这样。 我不想让示例/测试项目更复杂。 为什么C#为minions:因为它在大多数Windows机器上运行。 我可以将可执行文件提供给各种朋友,他们可以执行它并帮助我测试我的项目。 抓取过程和redisfunction不是我的问题的一部分。 我的第一种方法是PUSH / PULL模式,它通常适用于我的场景,但不知道它的仆从。 我想我需要一个中间经销商/经纪人经纪人,并且必须为自己处理工人意识。 我发现了这个问题,但我不确定我是否理解答案…… 我想要一些提示如何强制zmq的东西。 经销商方法是否正确? 有没有办法获得自动工人意识? 我想我需要一些资源/示例,或者你认为我只需要深入研究zmq指南? 但是,朝正确方向的一些提示会很棒:) 干杯

如何保护ZeroMQ请求回复模式以防止潜在的消息丢失?

我正在尝试在c#应用程序和分布式python服务器之间的TCP层上实现ZeroMQ模式。 我有一个使用请求 – 回复REQ/REP模式的版本,在localhost测试时看起来相对稳定。 但是,在测试中,我调试了一些情况,我在收到回复之前意外地发送了多个请求,这显然是不可接受的。 在实践中,网络可能会有大量丢弃的数据包,我怀疑我将丢弃大量的回复和/或无法发送请求。 1)有没有办法重置REQ/REP请求 – 回复套接字 之间的连接 ? REOUTER/DEALER模式会更有意义吗? 由于这是我第一次使用ZeroMQ,我希望保持简单。 2)是否有一个良好的ZeroMQ机制来处理连接事件? 我一直在阅读“指南”,有一些关于监控连接的提及,但没有例子。 我找到了ZMonitor ,但无法在c#中触发事件。

ZeroMQ C#Ironhouse的例子

我是ZeroMQ的新手,并且一直在使用ZeroMQ NuGet包和NetMQ和NetMQ Security NuGet包来比较消息的安全性。 到目前为止,我还没能找到使用Curve Security的Ironhouse示例的C#版本。 ZGuides回购中有一个“todo”项目,但到目前为止还没有实现。 ( https://github.com/metadings/zguide/issues/1 ) 我还试图确定NetMQ.Security安全方法是否优于ZeroMQ 4中内置的曲线安全方法。看起来大多数有关Curve的信息至少来自2014年或更早。 任何信息将不胜感激!

使用C#winform的zeromq pub / sub示例

我正在尝试创建一个C#Winform应用程序,它在pub / sub模型中使用ZeroMQ(通过nuget的clrzmq .net bindings(x86))。 经过多次搜索,我只能找到独立的C#示例,其中代码使用while语句无限期地处理新消息。 当我尝试使用这些示例时,我不知道将代码放在何处,它只会阻止gui和其他所有内容。 我不知道如果不使用另一个线程是不可能做到的,但我的印象是ZeroMQ的异步行为可以在不编写额外线程的情况下工作。 也许我只是不知道在哪里放zeromq代码,或者我真的需要另一个线程。 如果有人可以提供一个简单的pub / sub示例,其中包含将代码实际插入默认C#winform应用程序的方向,我们将非常感激。

0MQ:如何以线程安全的方式使用ZeroMQ?

我阅读了ZeroMq指南 ,我偶然发现了以下内容: 您不能在线程之间共享ØMQ套接字。 ØMQ套接字不是线程安全的。 从技术上讲,它可以做到这一点,但它需要信号量,锁或互斥量。 这将使您的应用程序变得缓慢而脆弱。 在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术。 后来: 切记: 除了创建它们的线程外,不要使用或关闭套接字。 我也明白ZeroMQ Context是线程安全的。 如果一个类在.Net中注册另一个类的事件,则可以从与创建监听器的线程不同的线程调用此事件。 我认为只有两个选项可以从事件处理程序中通过ZeroMQ-Sockets调度: 将eventhandler-invoking-thread同步到创建ZeroMQ- Socket的线程 通过使用线程安全的ZeroMQ- Context为事件处理程序中的线程创建一个新的ZeroMQ- Socket /获取现有的ZeroMQ- Socket 似乎0MQ-Guide不鼓励第一个,我不认为为每个线程创建一个新的ZeroMq-Socket是高性能/可行的方式。 我的问题 : 在事件处理程序中通过0MQ发布消息的正确模式(它的意图是什么)是什么? 此外,该指南的作者在撰写时还考虑了.Net的ZeroMQ-Binding: 在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术。 ? 这里有一些示例代码来强调我的问题/问题: public class ExampleClass { public event EventHandler SomethinIsCalledFromAnotherThread; } public class ByteEventArgs : EventArgs { public byte[] BytesToSend; } public class Dispatcher { ZMQ.Context ctx; public […]