关注点:基于TCP和UDP的Socket编程
1. 基于TCP协议的Socket程序调用过程
注意: 监听Socket和传数据的Socket是两个,一个是监听Socket,一个是已连接Socket
2. 基于UDP协议的Socket程序函数调用过程
注意:UDP 是没有维护连接状态的,因而不需要每对连接建立一组 Socket,而是只要有一个 Socket,就能够和多个客户端通信
3. 如何连更多?
3.1 方式一:将项目外包给其他公司(多进程方式)
特点:Linux下用fork创建子进程,会拷贝文件描述符列表,也会复制内存空间,占用资源多
3.2 方式二:将项目转包给独立的项目组(多线程方式)
特点:更加轻量级,Linux用Posix线程库的话可以用pthread_create
3.3 方式三:一个项目组支撑多个项目(IO多路复用,一个线程维护多个Socket)
特点:某个线程紧盯所有的Socket,都放在一个文件描述符fd_set中
C10K: 它的意思是一台机器要维护 1 万个连接,就要创建 1 万个进程或者线程,那么操作系统是无法承受的。如果维持 1 亿用户在线需要 10 万台服务器,成本也太高了。
3.4 方式四:一个项目组支撑多个项目(IO多路复用,从“派人盯着”到“有事通知”)
特点:epoll,注册callback ,解决C10K的利器