美文网首页PHP经验分享Swoole教程
swoole源码-http请求数据接收

swoole源码-http请求数据接收

作者: cc180912 | 来源:发表于2018-12-05 21:03 被阅读16次

swoole的协议解析是在reactor线程中处理的,在reactor swReactorThread_loop() 事件循环中通过 swPort_set_protocol() 注册了协议解析处理函数, 其中http的协议解析函数是 swPort_onRead_http()

reactor线程启动文件: src/network/ReactorThread.c swReactorThread_start()

如果对reactor事件处理流程不清楚可以参考这篇文章 swoole-主线程和reactor线程交互流程

下面主要来看 swPort_onRead_http, 对http协议的解析 。 这里说明下,有了这个协议解析后,如果你启动的是http server或者,启动是配置了 open_http_protocol 选项, 都会执行swPort_onRead_http对数据进行http协议解析, 这样在 onReceive() 中接收到的就是整个http请求的数据

swPort_onRead_http() 函数在 src/network/Port.c 文件中, 源码就不帖了, 说下这个函数的主要功能

  1. 通过 swConnection_recv() 可能多次获取, 保证最终拿到一个完整的http包, 如果大文件这种会收到一个一个http chunk包, chunk的处理不在这里,而是在具体的worker中
  2. 如果http method是 100-continue, 则直接处理
  3. 如果请求的是静态文件,则通过 swPort_http_static_handler() 直接返回静态文件内容, 静态文件处理说明
  4. 其他情况都通过 swReactorThread_dispatch(conn, buffer->str, buffer->length); 发送给worker去处理

通过swReactorThread_dispatch后 会回调worker的 onRequest,或者onReceive() 的回调函数, 关于http协议的解析,以及数据是如何解析到 Http\Request->header、 Http\Request->get、 Http\Request->post等是在 swoole_http_server.c 中完成

相关文章

  • swoole源码-http请求数据接收

    swoole的协议解析是在reactor线程中处理的,在reactor swReactorThread_loop(...

  • HTTP

    HTTP请求报文:请求行(包括http协议版本,请求方法等),消息报头(连接情况,接收的数据类型,接收数据范围等)...

  • HTTP请求头和响应头

    HTTP请求头 浏览器HTTP请求头信息全部都在服务器的 _SERVER 接收数据](http://upload-...

  • LINUX C语言网络编程

    SOC实现一个HTTP请求 总纲 创建SOC 连接SOC 发送HTTP请求头数据 接收返回的数据 创建SOC so...

  • HTTP协议

    一、HTTP协议 二、请求流程 搜集数据 生成http请求报文 发送请求报文 接收响应报文 解析响应报文 展现结果

  • 11、Request & Response

    Request & Response request: 由Http请求封装而成的对象,用于接收浏览器提交的数据。从...

  • HTTP 之 一次完整的http请求处理过程

    http请求处理过程如下 .1、建立连接:接收或拒绝连接请求,通过三次握手建立 .2、接收请求:接收客户端请求报文...

  • swoole笔记03(搭建http服务器)

    常规: http请求从nginx->fast-cgi->php->返回给前端用户 (fpm) swoole ...

  • 添加swoole扩展

    源码安装swoole unzip swoole-swoole-v2.1.1.zip 解压 swoolecd swo...

  • Web服务前篇 简单的http请求过程

    一次完整的http请求处理过程: (1) 建立或处理连接:接收请求或拒绝请求 (2) 接收请求: 接收来自于网络的...

网友评论

    本文标题:swoole源码-http请求数据接收

    本文链接:https://www.haomeiwen.com/subject/moqgcqtx.html