热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:等待连接的正确方法是什么?分享

等待连接的正确方法是什么?我正在尝试使用NetMQ实现在两个应用程序之间传递的简单消息(稍微更详细地描述了我想要实现的内容)。经过一些试验和错误后,我发现在ConnectBind调

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

我正在尝试使用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 } } } 

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

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

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

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

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

接收和发送都可以等到可以执行,你在你的例子中传递了真实的dontWait参数,只需删除它,它就会发送消息。

对于接收,您不必睡觉,因为它将等到消息可用。

正如使用Poller建议的那样也是一个解决方案(您可以在套接字可以发送时进行轮询以及何时可以使用消息),请查看poller类的测试: https : //github.com/zeromq/netmq/blob /3.3.3-rc5/src/NetMQ.Tests/PollerTests.cs 。

上述就是C#学习教程:等待连接的正确方法是什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注&#8212;编程笔记


推荐阅读
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
author-avatar
大众化的公爵樱桃rwr_208
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有