我是ZeroMQ(和一般而言的网络)的新手,并且有一个关于在多个客户端连接到单个服务器的设置中使用ZeroMQ的问题。 我的情况如下:

-1台服务器
-多个客户

-客户端向服务器发送消息:我已经弄清楚了如何做这部分。
--Server将消息发送到特定的客户端:这是我遇到的麻烦。 在服务器上处理某些事件后,服务器将需要向特定客户端(不是所有客户端)发送消息。 换句话说,服务器将需要能够选择向哪个客户端发送给定消息。

现在,这是我的服务器代码:

using (NetMQContext ctx = NetMQContext.Create())
{
    using (var server = ctx.CreateResponseSocket())
    {
        server.Bind(@"tcp://127.0.0.1:5555");
        while (true)
        {
            string fromClientMessage = server.ReceiveString();
            Console.WriteLine("From Client: {0}", fromClientMessage);

            server.Send("ack"); // There is no overload for the 'Send'
                                   method that takes an IP address as an argument!
        }
    }
}

我感觉问题出在我的设计是错误的,并且ResponseSocket类型并不是要以我想使用的方式使用。 由于我是新手,因此非常感谢您提供任何建议!

===============>>#1 票数:1 已采纳

使用“响应”套接字时,您总是答复发送给您消息的客户端。 因此,请求-响应套接字类型一起只是简单的请求响应。

对于更复杂的情况,您可能需要使用Dealer-Router。

使用路由器时,每条消息的第一帧都是路由ID(向您发送消息的客户端的身份)

因此您的路由器示例将如下所示:

using (NetMQContext ctx = NetMQContext.Create())
{
    using (var server = ctx.CreateRouterSocket())
    {
        server.Bind(@"tcp://127.0.0.1:5555");
        while (true)
        {
            byte[] routingId = server.Receive();
            string fromClientMessage = server.ReceiveString();
            Console.WriteLine("From Client: {0}", fromClientMessage);

            server.SendMore(routingId).Send("ack");
        }
    }
}

我还建议阅读zeromq指南 ,它可能会回答您的大多数问题。

  ask by Brian Snow translate from so

未解决问题?本站智能推荐:

1回复

NetMQ(ZeroMQ)如何使“无经纪人可靠性(自由职业者模式)”起作用

我从ZeroMQ指南获得的示例遇到了一些问题,看起来类ZSocket和ZContext不存在。 我对ZeroMQ完全陌生(只需开始学习),并且正在遵循“ ØMQ-指南”。 关于REQ-REP的第一个示例非常简单,效果很好。 但是现在我正在尝试更类似于我的目标的“无经纪人可靠性(自由职业者模式) ”,
1回复

在Xamarin中使用ZeroMQ

我有一个由服务器和客户端组成的应用程序。 服务器是C / C ++应用程序,客户端是面向Windows,Android和iOS的跨平台Xamarin应用程序。 服务器部分和客户端部分使用ZeroMQ消息进行通信。 我尝试了当前的c#实现,如NetMQ和clrzmq,但它们不能在
3回复

ZeroMQ:消息消失

我们有一个充当服务器的Java应用程序。 客户端应用程序(用C#编写)使用ZeroMQ与它通信。 我们(大多数)遵循懒惰的海盗模式。 服务器有一个Router套接字,实现如下(使用JeroMQ): 客户端连接并发送如下消息: 当多个客户端同时发送消息时,我们遇到了丢失的
1回复

在这种情况下,建议使用哪个ZeroMQ套接字?

我们正在WebApi和SignalR的基础上构建一个在线游戏(基于浏览器)平台。 低延迟响应时间和可扩展性是我们的首要任务之一。 在可伸缩性方面,我们正在考虑横向扩展方法,以在多个服务器节点上分配应用程序负载。 但是,这种架构并非没有其他复杂性。 让我先描述问题,再问我的问题。 考
1回复

Zeromq哪个套接字应该绑定在PubSub模式上

我一直在阅读关于ZeroMQ的更多关于NetMQ的内容以及我看到用于绑定Publisher套接字然后订阅者套接字连接到另一个的几乎所有Pub / Sub示例。 所以我想知道是否可以做反向,我的意思是绑定订阅者套接字,然后发布者连接到它。 这可能吗 ? (我在文档中没有发现任何明确的
1回复

REQ / REP模式中的ZeroMQ FiniteStateMachineException

我有两个简单的组件,应该使用REQ / REP ZeroMQ模式相互通信。 服务器(REP套接字)是使用pyzmq在Python中实现的: 使用NetMQ库以C#编写的客户端(REQ套接字): 通过与使用Python实现的REQ套接字进行通讯,Python Server实现已经
1回复

ZeroMq插座设计

我需要从不同的代理向单个进程发送大量的短消息 。 来自10个代理的大约10-15 2-3 Kb消息/秒。 一些代理在同一台计算机上运行,​​而其他代理则在同一VLAN中的不同计算机上运行。 要求是在生成消息与开始在主要服务内部进行处理之间的最小延迟 。 峰值最大50ms是可以
1回复

ZeroMQ服务器/客户端类型的正确模式

我有一台服务器,该服务器需要获取有关在另一台计算机上为客户端运行进程的指令。 客户端发送作业消息,服务器处理作业,然后发送回结果。 我尝试使用NetMQ请求-响应模式(请参见下文) 这对于1个客户端来说效果很好,但如果第二个客户端在上一个客户端作业完成之前发送了请求,则会出错-
1回复

ZeroMq / NetMQ无法从ReceivingSocketExtensions找到扩展ReceiveFrameBytes

在NetMQ中发布/订阅时,我如何接收字节。 我正在尝试使用来自ReceivingSocketExtensions的扩展字节[] ReceiveFrameBytes(),但我只是看不到它的智能。 我正在使用NetMQ,它是扩展的容器名称空间。 我正在使用Nuget NetMq软件包
1回复

ZeroMQ发布者套接字-订阅时引发事件

我想知道是否有办法在发布者套接字的新订阅上引发事件 例如: 当然, OnSubscription确实不存在,但是我想知道是否有任何解决方法。 我需要我的服务器知道所有订阅。 我虽然有两种实现它的方法: 在服务器中创建一个附加的路由器套接字,所有订阅都将发送到发