TcpServer类:
支持同时绑定多个地址进行监听,只需要在绑定时传入地址数即可。还可以指定接收客户端和处理客户端的协程调度器。
HTTP模块
HTTP常量定义
HTTP方法HttpMethod
HTTP请求方法定义了客户端和服务器之间的通信方式,主要有:
- GET:从服务器中获取资源。用于请求数据而不对数据进行更改。例如从服务器中获取网页、图片等。
- POST:向服务器发送数据以创建新的资源,常用于提交表单数据或上传文件,发送的数据包含在请求体中。
- PUT:向服务器发送数据以更新现有资源。若资源不存在就创建新的资源。与POST不同的是,PUT通常是幂等的,即多次执行相同的PUT请求不会产生不同的结果。
- DELETE:从服务器删除指定的资源。请求中要包含要删除的资源标识符。
- PATCH:对资源进行部分修改。与PUT类似,但PATCH只更改部分数据而不是替换整个资源。
- HEAD:类似于GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如检查资源是否存在,查看响应的头部信息)。
- OPTIONS:返回服务器支持的HTTP方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享的预检请求。
- TRACE:显示服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。
- CONNECT:建立一个服务器的隧道,通常用于HTTPS连接。客户端可以通过该隧道发送加密的数据。
HTTP状态HttpStatus
当浏览者访问一个网页时,浏览者会向网页所在的服务器发出请求。当浏览者接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头,用以响应浏览器的请求。常见状态码有:
- 1xx(信息性状态码):表示接收的请求正在处理;
- 2xx(成功状态码):表示请求正常处理完毕;
- 3xx(重定向状态码):需要后续操作才能完成这一请求。
- 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。
- 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。
HTTP请求与响应结构
用于封装HTTP请求与HTTP响应。对于HTTP请求需要关注HTTP方法、请求路径和参数、HTTP版本、HTTP头部的key-value、cookies及HTTP Body内容。 对于HTTP响应,关注HTTP版本、响应状态码、响应头部的key-value结构以及响应的Body内容。
HTTP解析器
输入字节流,解析HTTP消息,包括HttPRequestParser和HttpResponseParser两个结构。通过套接字读到HTTP消息后将消息内容传递给解析器,解析器通过回调的形式通知调用方HTTP解析的内容。
HTTP会话结构HttpSession
继承自Socketstream,实现了套接字流上读取HTTP请求与发送HTTP响应的功能,在读取HTTP请求时需要借助HTTP解析器,以便于将套接字流上的内容解析称HTTP请求。
HTTP服务器
继承自TcpServer,重载handleClient方法,将accept后得到的客户端套接字封装成HttpSession结构,以便接收和发送HTTP消息。
HTTPServlet
提供HTTP请求路径到处理类的映射,用于规范化的HTTP消息处理流程。
HTTP客户端HttpConnection
用于发起GET/POST等请求并获取响应,支持设置超时,keep-alive,支持连接池。
守护进程
将进程与终端解绑,转到后台运行,除此之外,sylar还实现了双进程唤醒功能,父进程作为守护进程的同时会检测子进程是否退出,若子进程退出,则会定时重新拉起子进程。以下是守护进程的实现步骤:
调用daemon(1,0)将当前进程以守护进程的形式运行;
守护进程fork子进程,在子进程运行主业务;
父进程通过waitpid()检测子进程是否退出,若子进程退出,则重新拉起子进程。