想学网络编程,第一个问题往往是选语言。这个问题没有标准答案,因为不同语言擅长的地方不一样,关键看你最终要做什么:是理解底层原理,还是快速做出服务,还是去写高并发后端。
如果目的是搞懂原理,C语言是最好的入口。socket、bind、listen、accept、read、write这几个函数走一遍,TCP连接怎么建立、数据怎么收发、阻塞和非阻塞有什么区别,全都清楚了。再学epoll,就明白高并发服务器为什么能用一个线程管几万连接。
Java在企业后端里用得最多。它的NIO把多路复用封装好了,Netty这个框架更是把网络编程的复杂度降到很低,粘包拆包、心跳、编解码都有现成组件。学会Netty,写一个高性能服务端并不难,招聘市场上这类岗位也多。
Python适合快速验证。标准库的socket模块够用,asyncio能写异步服务,代码量少、调试方便。缺点是GIL限制,CPU密集场景性能不行,高并发长连接也不如Go和Java。做工具、做原型、做爬虫,Python很顺手。
Go这几年在云原生领域很火。goroutine让并发编程变得简单,一个连接一个goroutine,代码写起来像同步的,性能却接近异步。HTTP、gRPC的库都很成熟,写微服务效率高。如果想往后端基础设施方向发展,Go值得投入。
建议的路线是:先用C把socket和TCP、UDP的原理打通,再用一门工程语言做实际项目。语言只是工具,网络编程真正难的是对协议、并发模型、错误处理的理解。把这些搞清楚了,换语言只是查文档的事。
上一篇:分集接收是什么:空间、频率、时间分集各自解决什么问题
下一篇:没有了