零声学院公开课的一次知识整理:
1: 思考TCP的并发:
如何实现tcp的并发?
1:I/O多路复用是不错的选择。
2:如果是高并发的web服务器,应该怎么考虑?
1:保证连接数量可以达到一定的量。 (重点是文件fd的限制,和网络代码逻辑的设计)
2:保证在连接数的基础上,业务后台处理(数据库,业务,https等)能达到一定的量。
3:可以使用reactor模式进行实现
4:协程处理。
3:可以试试reactor模式的websocket的实现。 (思考reactor模式的设计==》回调函数触发)
4:需要理解Posix api相关的接口及参数。
5:需要了解网络上开源库并发实现(redis, mysql, nginx, haproxy)
2:思考UDP的并发:
1:udp的使用场景:
游戏开发,音视频,高速下载
2:如何实现udp的高并发?
可以模拟tcp的三次握手,当收到一个client的连接,可以新建一个fd进行通信。
在udp协议的基础上,实现应用层协议对udp报文进行控制。
3:网络中相关概念
端口: 实际上操作系统中并没有相对应的硬件,叫做端口。
在网络通信中,端口的概念只是tcp/udp报文头中的一个字段,用来过滤网卡对报文的接收。
socket: 翻译是 插座
这里的socket 是指计算机中fd ==>五元组(源ip,源端口,目的ip,目的端口,协议)
相关的接口调用fd进行发送,实际上是根据对应关系找到五元组进行发送的。
4:作为一个开发人员,如何提升及巩固网络开发能力?
尤其是c/c++,对底层要求和个人积累沉淀很重要。
要向有效提升,需要有意识地对底层需要地技术栈进行积累和沉淀。
在一定地基础和沉淀前提下,可以试着把自己的知识整理成相关的库试试:
例如:
ntyco 协程的开源库
协程用在哪里,原语,切换,调度,性能测试,多核
ntytcp 用户态协议栈
11个状态迁移,sendbuff,recvbuff,epoll
5:衍生需要了解的其他技能:
1:虚拟内存, 如何处理内存泄漏相关问题。
2:rpc的实现及理解
3:云服务器,微服务相关知识
4:分布式,集群相关
5: 项目构思,软技能的积累