请教各位 C++大佬,现在网络通信库满天飞,深入学习网络编程相关的内容是否还有必要?

2022-06-25 16:29:28 +08:00
 liuguangxuan

一直对网络编程比较感兴趣,想深入学习,但是学好了,可能顶多做一个网络通信的中间件出来。

目前 C/C++通信库的轮子已经有很多了,像 libevent 、muduo 、asio 等等。在考虑是否还有必要深入学习这方面的知识。因为人的经历总是有限的。

所以想请教各位大佬:

  1. 如果学好了网络通信方向的知识,有哪些方面的工作可以从事?
  2. 如果不推荐网络通信方向的话,C++目前有哪些推荐的方向?
5130 次点击
所在节点    C++
33 条回复
ggvm
2022-06-25 16:48:56 +08:00
你这个问题真是令人无语。 和那些学完 CRUD 之后觉得人生很空虚的程序没有任何区别。


你其实不是有兴趣,你只是隐约的觉得掌握了这些东西之后自己会很牛。

如果你真的有兴趣,你会去看 nginx 的代码,研究他为什么这么牛。 你也会去看看 libevent 的代码,看看他的设计。或者也会去看看 muduo 的代码,看看作者为啥要重复发明一个轮子。
thedrwu
2022-06-25 17:16:48 +08:00
网络通信 ≠ socket+poll/select 编程
statumer
2022-06-25 17:33:24 +08:00
网络编程和造 C++ 网络库轮子完全是两码事,先搞懂这个吧。
ipwx
2022-06-25 18:16:26 +08:00
有没有一种可能,通常而言“网络编程”指的是用你说的这些个程序来写性能不错的应用程序。。。
liuguangxuan
2022-06-25 19:30:46 +08:00
@ggvm #1 老哥,你上来就是一顿喷,喷完我了,你倒是上点儿干货啊。

反复看了好几遍你的回答,我实在搞不懂你在表达什么意思。

1 、“你这个问题真是令人无语。”

为什么会令你无语?我对技术和职业发展方向有疑问,在这里问一下同行们,我没觉得有什么不妥,你可以选择回答,也可以选择不回答,为什么你会无语。如果你觉的我问的问题令你无语,你为什么又浪费自己的生命来回答呢?为了教我做人?你问一下自己,你人做的怎么样?

2 、“ 和那些学完 CRUD 之后觉得人生很空虚的程序没有任何区别。”

为什么你会觉得学完 CRUD 的人觉得空虚?你当时学完 CRUD 有这种感觉?你为什么又觉得我觉得和他们一样,感觉人生空虚,我仔细看了好几遍我的问题,字里行间哪句能体现出空虚来?

3 、“你其实不是有兴趣,你只是隐约的觉得掌握了这些东西之后自己会很牛。”

为什么你会觉得我掌握了这些东西会觉得自己很牛,为什么单纯的通过几句提问就会给一个人贴上这种标签,我的问题哪句表述有觉得自己很牛?我题目上标着“请教各位 C++大佬”,一直保持着谦虚的请教的态度,请你告诉我我那句话体现了觉得自己很牛?另外你上来就喷,我给你贴喷子的标签了吗?我照样称呼你老哥,不明白你为什么会无缘无故的给人乱贴标签。

4 、“如果你真的有兴趣...看代码。”

为什么你会得出结论,我没有看过这些代码,请问你是从哪里得出来的结论呢?我看过了 muduo 的代码,但是我还是有这个疑问啊。


总结:
1 、如果你觉得我问的问题无聊,你完全可以不回答,没必要浪费生命来回答我的问题啊。

2 、如果你觉得通过贬低别人能抬高自己的身价,那你错了,除了在家你爸妈让着你,在公司如果你是小领导的话,你的同事们迫于绩效考核让着你,在外面没人惯着你。

3 、如果你真的很牛,请正面回答问题,如果不会审题,语文没学好,麻烦回家请教一下自己的小学语文老师。

4 、如果你真的很牛,麻烦拿出来干货来,你的博客、你的 GitHub ,你的开源项目来证明你自己,这里都是技术人员,让大家看看你的技术水平到底怎么样,麻烦不要通过踩底别人的这种幼稚的行为,来提升自己,否则只能会让别人以为你是个无脑的喷子。
jones2000
2022-06-25 19:43:23 +08:00
你先学,学完不就知道了嘛。
liuguangxuan
2022-06-25 19:43:50 +08:00
@thedrwu #2
@statumer #3
@ipwx #4 老哥们,自己不知道网络编程的天花板在哪儿,以后可能从事哪些方面的工作。

担心如果一直深入学网络编程这个方向的话,会不会就是写一些网络库的轮子,然后给别人调用。

然而现在网络库的轮子太多了,就算自己造轮子也不一定有人家的好用,所以才会产生疑问,这个方向还要不要继续深入钻下去。要不要换个其他的方向。

因为自己接触的东西有限,还望各位老哥点拨一下。
liuguangxuan
2022-06-25 19:44:35 +08:00
@jones2000 #6 人的经历是有限的啊,老哥。担心走弯路,所以先来请教以下有经验的老哥们。😂
liuguangxuan
2022-06-25 19:45:02 +08:00
@jones2000 #6 经历->精力
jones2000
2022-06-25 19:49:41 +08:00
@liuguangxuan 编程这个东西, 你往一个方向走,总能变成专家的。时间是靠自己挤出来的。
jones2000
2022-06-25 19:50:18 +08:00
@jones2000 前提是你喜欢编程,如果不喜欢就算了。
meystack
2022-06-25 20:45:58 +08:00
这个我可以告诉你,我以前写过 Windows 下的 IOCP 网络模型,我建议你首先是需要搞明白网络模型的细节。
然后用别人开源的库,而不是自己造轮子,没那个必要,时间跟精力你就算付出,会有两个问题

1 、你需要大量的时间来维护和修改自己的模型 BUG
2 、早晚忘得一干二净!!!
liuguangxuan
2022-06-25 21:06:12 +08:00
@meystack #12 感谢老哥中肯的回答。我也有这种感觉,所以今天才会提出了这个问题。如果不从事网络相关的开发,老哥有没有更推荐的 C++发展方向?
janus77
2022-06-25 21:06:46 +08:00
这个要看你的目的,你是为了找工作而学那就可以学,你是为了纯粹的吸收知识那也可以学,只是为了装逼就别学了,为了学而逼自己找这方面的工作,那也没必要的
c++一直都是很稳定的需求,没有特别火但是也没有凉凉,按照典型的知识路线去学就行了,不用为了找热点而看工作。c++的主流应用方向一直都是那几个,基础设施建设(数据库操作系统中间件等)、特定行业领域(游戏 图形学 音视频 金融 传统工业制造业)
meystack
2022-06-25 21:10:27 +08:00
@liuguangxuan 可以往 C/C++游戏开发的方面去转,普通的就业岗位内卷太严重了
但是做 C/C++ 网络编程肯定是必学的,如果有底子的话,Windows 下的 IOCP Linux 下的 epoll 都去学习下,
写个示例入门,再去掌握别人的开源库去开发应用基本没啥大问题!
youjianchuiyan
2022-06-25 21:26:32 +08:00
这东西也就那么回事。
ipwx
2022-06-25 21:28:14 +08:00
@liuguangxuan

1. 不用太纠结网络编程本身。能看懂各个库的原理(不是代码),尝试写一点小代码(实验性)调通对应原理,就 okay 了。没必要封装个什么新轮子。
2. 甚至其实你用这些网络库本身能写出来应用已经是调通了对应原理了。调试过程中你就实践了这些知识。
3. 我不知道网络编程天花板在哪里,因为大部分人都是懂了你说的这些去做别的上层应用的,而且比 CRUD boy 强多了。所以网络编程是提高你的上限去江河湖海耍,而不是让你建一个鱼塘在里面玩的。
4. 你对于 C++ 的疑问也是同样的思维误区。C++ 在很多很多应用里面都会用到,比如低延迟交易、高吞吐量的业务服务器、图形学相关(比如游戏引擎)、大型专业软件(比如 WPS Office 、Photoshop 等)、数据库系统(你可以不用写个数据库,但你说不定有朝一日需要给 mysql/postgresql 写插件)、算法(传统、AI )等都是重要的组成部分。

我觉得老哥你的主要关键误区在于,总觉得吃透 “一项技术” 能行了。但现实不是这样的。要离开 CRUD boy 的层次,你需要的是对各种技术都有涉猎,然后再把它们融会贯通,最后会在解决实际问题的部分使用最合适的技术。能用别人的系统(比如 Redis )就不要自己手撸,能用别人的类库(比如 muduo )就不要自己再用 epoll 重新造一个。
ipwx
2022-06-25 21:40:40 +08:00
@liuguangxuan 再举个例子,你可以看看 pybind

https://github.com/pybind/pybind11

这东西配合 cmake 可以很容易写一写 python 算法扩展类型的项目,然后用比如 FastAPI

https://fastapi.tiangolo.com/

就能发布为微服务给前端应用使用了。

----

所以真正的技术是没有那么多条条框框边界的。说实话 pybind 封装算法,也应该封装还算快的算法(比如 1ms 以下延迟)。如果是几秒以上的算法,我个人会直接用 c++ 写一个命令行程序,stdin 读入,然后 fastapi 开 asyncio.subprocess 直接对接到前端。
Alan1978
2022-06-25 22:22:06 +08:00
建议用成熟的库 这种基础组件要经过大量实际场景的检验 不断的修复 bug 自己造的库只有自己在采坑 bug 有多少什么时候爆出来完全是盲盒
xsqfjys
2022-06-26 00:46:18 +08:00
先搞定对工作有用的对工资有帮助的,剩下的看个人兴趣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862146

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX