sylar-from-scratch----TcpServer类

103 阅读4分钟

TcpServer类:

支持同时绑定多个地址进行监听,只需要在绑定时传入地址数即可。还可以指定接收客户端和处理客户端的协程调度器。 image.png

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()检测子进程是否退出,若子进程退出,则重新拉起子进程。