16 | 网络通信:我不想写原生Socket
该思维导图由 AI 生成,仅供参考
libcurl:高可移植、功能丰富的通信库
- 深入了解
- 翻译
- 解释
- 总结
网络通信:摆脱原生Socket编程的烦恼 本文介绍了C++中几个优秀的网络通信库:libcurl、cpr和ZMQ,帮助读者摆脱原生Socket编程的烦恼。libcurl是一个高可移植、功能丰富的通信库,支持多种协议,使用纯C语言开发,兼容性、可移植性非常好。cpr是对libcurl的C++11封装,使用了现代C++的高级特性,对外的接口模仿了Python的requests库,非常简单易用。ZMQ是一个高级的网络通信库,支持多种通信模式,可以把消息队列功能直接嵌入应用程序,搭建出高效、灵活、免管理的分布式系统。ZMQ不仅可以收发数据,还可以用作消息中间件,解耦多个应用服务之间的强依赖关系,搭建高效、有弹性的分布式系统,从而超越原生的Socket。ZMQ的用法简单,但想要发掘其潜力,处理大流量的数据还需要深入了解,选择合适的工作模式,再仔细调节各种参数。总的来说,libcurl和cpr适用于客户端应用,而ZMQ则是一个更底层、更灵活的网络通信工具,支持客户端和服务器端编程,适用于构建高效、灵活的分布式系统。
《罗剑锋的 C++ 实战笔记》,新⼈⾸单¥59
全部留言(43)
- 最新
- 精选
- 屈肖东老师什么时候可以推荐几个值得读的比较通用的开源代码,因为很多开源代码虽然很好,但是太过复杂庞大,很难阅读。或者写一篇针对如何更好的阅读源码的文章。毕竟读代码应该是学习写代码最好的方式
作者回复: C++开源库很多都比较大、比较复杂,找合适学习的还真不是件容易的事情。 我觉得比较好的开始方式是看课程里推荐的这几个库,都不是特别大,功能比较单一,比较容易聚焦学习点。 看的时候可以先从代码风格看起,再熟悉C++关键字的用法,再到整体架构、接口设计。不能心急,不要想着几天或者一个月就能看完。而且也没必要完全看懂,只要能从中学到一两个点就可以说是值得了。
2020-06-1520 - 赖阿甘说实在在看文章之前,我还不知道ZMQ这个网络通信库,哈哈。老师怎么没提到libevent、libev、asio、muduo等网络通信库,是否这些库的接口比较原始,不好用,还望解答
作者回复: 你说的很对,这些库用起来比较复杂,一时半会说不清楚,光里面的epoll、多线程机制就要解释半天,要用起来更是要很多步骤。 我的想法还是让大家尽量快速上手,能用起来最重要。
2020-06-11315 - 编程国学军工行业,用户强调实时,一般采用udp,目前我们采用qt 自己的库,有没有好的建议
作者回复: qt我没用过,不好评价,我觉得可以试试zmq,它的性能也很不错。
2020-06-1147 - Seven我也知道别人的东西好,但是老师也用,会不会这样的依赖,而让我们进步缓慢,怎么看这个问题。如何破?
作者回复: 我觉得这个要从两方面去看,一个是要知道底层的运行原理,是基本功,另一个是要快速高效地开发出稳定可靠的应用。 这两者并不矛盾,可以齐头并行,一个是学习自身修炼,一个是工作的要求,而且两者也可以互相促进。 我们不自己造轮子,但要懂造轮子的原理,必要的时候能够自己造。
2020-06-236 - robonix疑惑同楼上~ ASIO 据说要加到c++ 20了,应该介绍呀?
作者回复: asio推迟到了C++23,而且从它的前身boost.asio来看,用起来也是很复杂的,里面的概念很多,不好一下子说清楚,以后如果有机会可以专门写一篇。
2020-06-115 - Stephen确实感觉nanomsg更新的很慢,而且资料,影响力都不如zeromq.请教老师一个事情,如果想要学习这一块,是选择ZMQ还是nanomsg呢,我最近在看zmq作者写的一本书《ZeroMQ:云时代极速消息通信库》.但同事说,zmq已经过时了,应该学习nanomsg,给我搞的很无语,老师怎么看?
作者回复: nanomsg很早就停止维护了吧,反而zmq一直在更新。不建议用nanomsg了,zmq有文档,有社区,这个技术支持是最重要的。
2021-03-2823 - 风请教罗老师,如何看待Go语言在网络编程上的发展势头~
作者回复: go了解的不多,但它后面有Google撑腰,所以发展的势头比较好,而且也有了很多成功的应用,今后应该还会继续保持这个势头吧。 不过我还是喜欢C++。
2020-06-263 - 章北海老师好,最近项目中用到了Windows平台的libcurl,https通信的时候一般通过系统的证书验证服务器的证书,有两种编译方式:一种是支持win sspi的,这种情况编译的libcurl不用手动加载系统证书就可以发起https请求,但是不同的Windows系统上可能运行不了一样的程序;另一种是编译支持openssl的版本,但是Windows平台openssl有点特殊,要手动指定ca证书文件。我目前用的是后者,有个疑惑:curl根证书可以从官网手动下载,但是如何预防证书过期呢?证书过期了就访问不了https了吧,一般在项目中我们如何处理根证书的过期问题?谢谢!
作者回复: 我想应该可以调用openssl接口解析证书,再检查它的有效期吧。
2023-09-08归属地:广东1 - 忧天小鸡有流媒体udp特别适合的库吗?刚接触c++,对编译什么的还不熟
作者回复: C++的库太多了,可以在GitHub上搜一下awesome C++之类的。
2021-12-161 - henry请问下罗老师,ZMQ的pub/sub, push/pull模式和redis相比有哪些优势? 如果多个进程之间要 pub,push 不同的业务类型数据,需要在一些进程中开多个端口,管理上有点麻烦,如果加一个Broker的中间层,又有点类似redis用法的意思
作者回复: zmq和redis的差距很大,用途也不同。 zmq的主要目的是为了高效地传输数据,消息不丢失,支持超大消息,而redis是内存存储,虽然有的模式比较像,但对应的业务场景是不同的。 具体怎么用还是要看实际情况,一般要求不高用redis简单,zmq用在高流量的时候。
2020-07-301