sylar项目HTTP模块框图 <sylar_leo>
2025-04-04 16:12:46   0  举报             
     
         
 关于学习sylar项目的http模块框图 2025.4.4  github https://github.com/Lwaiz/sylar_leo/tree/master
    作者其他创作
 大纲/内容
 SocketStream Socket流接口
  virtual int read() override             读数据 virtual int readFixSize() override  读固定长度的数据virtual int write() override            写数据virtual int writeFixSize() override  写固定长度的数据virtual void close() override         关闭流getSocket()                                   返回Socket类isConnected()                               返回是否连接
  Socket::ptr m_socket  Socket 对象,进行数据收发bool m_owner            是否主控
  遍历连接池 m_conns
  read() Socket in buffer
  HttpRequestParser解析器
  DoGet(uri) 发送GET请求
    创建 HttpResponse
  conn->sendRequest() 发送请求
  sock->connect(addr)连接服务器
  HTTPServer HTTP服务器
  handleClient() 处理客户端请求getServletDispatch()          获取ServletDispatchvoid setServletDispatch()  设置ServletDispatch
  bool m_isKeepalive     支持长连接ServletDispatch::ptr m_dispatch    Servlet分发器
  解析 Content-Length 读取请求体
  解码 gzip / deflate 内容
  否
  继承
  创建HttpRequest 对象 req设置请求头、请求体
  解析 URI 获取地址对象 (addr)
  writeFixSize() 确保完整发送
  bool m_isKeepalive     支持长连接ServletDispatch::ptr m_dispatch    Servlet分发器
  session->recvRequest() 读取请求
  session->sendResponse(rsp)发送响应
  writeFixSize() 确保完整发送
  函数请求处理
  是否有可用连接
  recvRequest
  分发请求
  Uri::Create(url)  创建uri
  ss.str() 序列化 HttpRquest
  ptr=new HttpConnection(sock)
  DoGet(url) 发送GET请求
  1.精准匹配
  getConnection() 获取连接
  execute() 解析响应头
  解析 响应体
  http_parser.h
  HTTP RequestParserHTTP ResponseParser
  <<http11client_parser.h>>HTTP 客户端响应解析
  解析 host 获取 IPAddress
  HttpRequestParser 解析请求
  execute()    解析协议
  http_parser m_parserHttpRequest::ptr m_data            int m_error       错误码
  HTTP Response 响应对象
  get、set方法setRedirect() 设置HTTP重定向dump() 序列化输出到流中
  HttpStatus m_statusuint8_t m_versionbool m_closebool m_websocketstd::string m_bodystd::string m_reasonMapType m_headersvector<string> m_cookies
  HTTP Request 请求对象
  get、set方法createResponse() 创建HTTP响应dump() 序列化输出到流中
  HttpMethod m_methoduint8_t m_versionbool m_closebool m_websocket  uint8_t m_parserParamFlagstd::string m_pathstd::string m_querystd::string m_fragmentstd::string m_bodyMapType m_headersMapType m_paramsMapType m_cookies
  handleClient()
  创建 HttpSession来处理请求
  ServletCreator<T> 泛型工厂
  virtual Servlet::ptr get() overridevirtual std::string getName() override
  DoRequest 发送请求 处理响应
  IServletCreator 工厂基类
  virtual Servlet::ptr get() = 0virtual std::string getName() = 0
  <<http11_parser.h>>HTTP/1.1服务器端请求解析
  Stream 流结构基类
  virtual int read() = 0             读数据 virtual int readFixSize() = 0  读固定长度的数据virtual int write() = 0            写数据virtual int writeFixSize()= 0  写固定长度的数据virtual void close() = 0         关闭流
  FunctionServlet  函数式回调Servlet用Lambda函数或回调函数来处理请求,处理轻量级请求
  NotFoundServlet 默认返回404
  std::string m_name       std::string m_content    
  解析请求头Header
  return ptr 返回连接
  rsp->setHeader设置Server头部信息
  invalid_conns 丢弃不可用连接
  DoPost(uri) 发送POST请求
  HTTP Result 响应结果结构体
  int result                                 错误码HttpResponse::ptr response  响应结构体std::string error                      错误描述
  Chunked响应体
  Uri::Create(url)  创建uri
  配置
  HTTPSession HTTP会话类 在套接字上 接收请求报文,发送响应报文
  HttpRequest::ptr recvRequest()                  接收HTTP请求int sendResponse(HttpResponse::ptr rsp)  发送HTTP响应
  conn->getSocket() 获取套接字
  是
  普通响应体
  http.h
  HTTP Methods  方法HTTP Status       状态HTTP RequestHTTP Response
  HttpConnectionPool 连接池需要keep-alive支持
  static HttpConnectionPool::ptr Create() 创建连接池HttpConnection::ptr getConnection();    获取连接HttpResult::ptr DoGet();                  发送GET请求HttpResult::ptr DoPost();                 发送POST请求HttpResult::ptr DoRequest();           发送HTTP请求
  std::string m_host;std::string m_vhost;uint32_t m_port;uint32_t m_maxSize;uint32_t m_maxAliveTime;uint32_t m_maxRequest;bool m_isHttps;std::list<HttpConnection*> m_conns; 连接池std::atomic<int32_t> m_total = {0};
  返回 HttpResponse
  默认请求处理
  创建TCP 或 SSL套接字 (sock)
  创建TCP连接(HTTP\\HTTPS)
  创建
  DoPost(url) 发送POST请求
  3.默认404
  getMatchedServlet
  HoldServletCreator 持有 Servlet 实例 
  Servlet::ptr m_servlet
  DoRequest 发送请求
  session->close()  关闭会话
  conn->recvResponse()接收请求
  conn->recvResponse() 接收响应
  HttpResponseParser响应解析器
  m_conns.pop_front() 从队头取出连接
  ptr = conn     复用该连接
  返回 HttpRequest
  ss.str() 序列化 HttpResponse
  EchoServer 回显服务器
        <接收客户端数据并返回>handleClient() 处理客户端请求 
  2.模糊匹配
  HttpResponseParser 响应解析
  http_parser m_parserHttpRequest::ptr m_data            int m_error       错误码
  TCPServer TCP服务器
  void setConf()         设置服务器配置virtual bool start()    启动服务 需要bind成功后执行,开始监听和处理客户端请求virtual bool bind()    绑定地址virtual void startAccept()      开始接受新的连接virtual void handleClient()     处理新连接的Socket类virtual bool stop()    停止服务 释放资源,关闭监听套接字
  HttpConnection HTTP客户端类
  static HttpResult::ptr DoGet();                  发送GET请求static HttpResult::ptr DoPost();                 发送POST请求static HttpResult::ptr DoRequest();           发送HTTP请求HttpResponse::ptr recvResponse();          接收HTTP响应int sendRequest(HttpRequest::ptr req);   发送HTTP请求
  uint64_t m_createTime = 0;uint64_t m_request = 0;
  recvResponse
  TCPServerConf 配置结构体
  address         服务器监听的地址keepalive      是否启用 keepalivetimeout         连接超时时间ssl = 0           是否启用 SSLid                  服务器 IDtype              服务器类型name            服务器名称cert_file  SSL 证书文件路径key_file   SSL 私钥文件路径accept_worker  负责accept的协程池io_worker  负责 IO 操作的协程池process_worker  负责业务处理map<> args   额外参数
  Servlet 请求处理基类
  std::string m_name   名称
  sendRequest
  void setConf()         设置服务器配置virtual bool start()    启动服务 需要bind成功后执行,开始监听和处理客户端请求virtual bool bind()    绑定地址virtual void startAccept()      开始接受新的连接virtual void handleClient()     处理新连接的Socket类virtual bool stop()    停止服务 释放资源,关闭监听套接字
  read() Socket in buffer
  conn->sendRequest(req)发送请求
  ServletDispatch  Servlet 分发器
   
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多
    
   
   
  
  
  
  
  
  
  
  
 