项目介绍
- Linux C++开发的轻量Web服务器,主要涉及
- 使用线程池+非阻塞socket+epoll+事件处理的并发模型
- 使用状态机解析HTTP请求报文,支持Post和Get的解析
- 访问服务器数据库实现web端用户注册、登录功能,可以请求视频和文件
- 实现同步/异步日志系统,可以记录服务器运行状态
- 通过了Webbench压力测试,可以实现上万的并发连接数据交换
- 主流的webserver有apache、nginx,
linux网络编程核心技术
Linux 网络编程核心
- Linux 下网络编程核心的包括系统编程和网络 IO 两个部分:
- 进程间通信方式: 信号量、管道、共享内存、socket 等
- 多线程编程:互斥锁、条件变量、读写锁、线程池等
- 五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动
- 高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 ProactorIO
- 复用机制:epoll、select、poll(破解 C10K 问题的利器)
Linux C++ 中的系统函数:
- 文件和I/O操作:
- open()、close():打开和关闭文件。
- read()、write():从文件中读取数据和向文件写入数据。
- lseek():设置文件偏移量。
- fcntl():文件控制。
- ioctl():设备控制。
- 进程和线程管理:
- fork()、exec()、wait()、waitpid():创建新进程、执行新程序、等待子进程结束。
- exit()、_exit():正常和非正常退出进程。
- getpid()、getppid():获取进程ID和父进程ID。
- pthread_create()、pthread_join()、pthread_exit():创建线程、等待线程结束、线程退出。
- 内存管理:
- malloc()、calloc()、realloc()、free():动态内存分配和释放。
- mmap()、munmap():文件映射到内存。
- brk()、sbrk():调整进程的数据段和堆。
- 进程间通信(IPC):
- pipe()、mkfifo():创建管道。
- msgget()、msgsnd()、msgrcv():消息队列。
- semget()、semop()、semctl():信号量。
- shmget()、shmat()、shmdt()、shmctl():共享内存。
- 网络通信:
- socket()、bind()、listen()、accept():创建套接字、绑定、监听和接受连接。
- connect()、send()、recv():连接到远程套接字、发送和接收数据。
- getaddrinfo()、gethostbyname()、gethostbyaddr():获取地址信息和主机信息。
- 时间和日期:
- time()、clock_gettime()、gettimeofday():获取当前时间。
- ctime()、strftime():时间格式化。
- 信号处理:
- signal()、sigaction()、kill():信号处理。
- 系统调用和系统信息:
- syscall():调用内核系统调用。
- getuid()、getgid()、getpid()、getppid():获取用户ID、组ID、进程ID、父进程ID等。
- 多线程编程
- 工具库:linux下使用pthread,c++11封装了跨平台的thread库
- 进程通信编程
相关博客
- TinyWebServer讲解——两猿社
- TinyWebServer——从0到服务器开发!
- Linux高性能服务器编程-pdf
- c++经验之谈一:RAII原理介绍
- Linux下的I/O复用与epoll详解
- 回调函数(callback)是什么
- posix是什么都不知道,还好意思说你懂Linux?
- c++标准
- pthread库
- semaphore库
- 跨进程通信
- IO
- IO多路复用
- HTTP
- C 基础