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

c# – 等待连接的正确方法是什么?,第1张

概述我正在尝试使用NetMQ实现在两个应用程序之间传递的简单消息(稍微更详细地描述了我想要实现的内容). 经过一些试验和错误后,我发现在Connect / Bind调用之后我不能立即发送或接收消息,因为它们是非阻塞的,即使尚未建立连接也会实际返回. 现在我用Thread.Sleep()解决了这个问题,但这对它有不好的品味,对于生产系统来说绝对不行. 所以问题是,如何在NetMQ / ZeroMQ中做到 我正在尝试使用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 (var server = ctx.CreatePullSocket())        {            server.Bind("tcp://127.0.0.1:5555");            Thread.Sleep(100); // wait for connection            while (true)            {                var str = server.ReceiveString();                Console.Out.Writeline(str);                Thread.Sleep(60*1000); // do msg processing            }        }    }

我想要实现的目标的描述:

客户端 – 将消息发送到单个服务器.当服务器不可用时,客户端不应阻止并且不应丢弃消息.客户端可以随时离线/在线.

服务器 – 从单个客户端接收消息.服务器将阻塞,直到收到消息.服务器需要对消息进行冗长的处理,并且在处理时不应丢失任何其他消息.服务器可以随时离线/在线.

解决方法 在服务器端睡眠的最佳解决方案是在拉出套接字上创建套接字轮询器并轮询,直到收到消息.这避免了浪费的睡眠,并且使得代码通常更紧凑.

在客户端,最好的解决方案可能是创建两个套接字(一个用于发送消息,一个用于接收),并让服务器宣布其存在,以便客户端发送消息.由于ZeroMQ可以有效地处理多个连接,因此该解决方案可以很好地工作.

总结

以上是内存溢出为你收集整理的c# – 等待连接的正确方法是什么?全部内容,希望文章能够帮你解决c# – 等待连接的正确方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存