创建HTTP服务器
建议首选阅读官方文档Http\Server章节
一、http_server简介
二、创建http_server
三、swoole_http_request
四、swoole_http_response
六、nginx+swoole (可查看左侧响应章节)
七、多端口监听
八、其他: 示例
一、http_server简介
swoole 内置实现了一个简单的httpServer类。swoole版的http server相对于php-fpm,最大优势在于高性能,代码一次载入内存,后续无需再解释执行,但是swoole_http_server对Http协议的支持并不完整,实际生产环境,一般是前面加一层Nginx,由Nginx解析一些静态css、js文件,php文件请求交由swoole处理
示意图:

1、http_server本质是swoole_server,不过在协议的解析部分固定使用的是http协议解析
2、完整的http协议请求会被解析并封装在swoole_http_request对象当中
3、所有的http响应都通过swoole_http_response对象进行封装和发送
二、创建http_server
使用swoole,通过几行代码即可写出一个异步非阻塞多进程的Http服务器
其中onRequest回调接收两个参数分别是swoole_http_request对象和swoole_http_response对象,分别负责request请求和response响应。
三、swoole_http_request
swoole_http_request,负责http请求的相关信息。我们可以在这个对象上,获取header\server\get\post\files\cookie等信息,这等同于php的超全局变量,但是这可不是超全局的。
注意事项:
1、Swoole的HttpServer可以接受application/x-www-form-urlencoded/form-data类型的POST参数,并且会将解析后的参数存放在swoole_server_request对象的post成员变量内。
对于application/json或者其他类型的请求参数,Swoole底层并不会自动解析。但是Swoole的swoole_server_request提供了rawContent方法可以获得原始的POST字符串,我们可以根据Content-type类型做相应的解析。
2、POST/文件上传需要设置临时文件位置(upload_tmp_dir),并且需要设置包的大小,最大尺寸受到 package_max_length 配置项限制,默认为2M,调用$response->end后会自动删除,在end之后操作上传文件会抛出文件不存在错误。
四、swoole_http_response
swoole_http_response,负责处理HTTP响应信息,包括响应的头信息header\响应状态等,跟传统的HTTP请求和响应差别不大,比较简单,大概了解下即可。
具体方法如下:
注意事项: 请在end()之前设置相应的响应头、状态等等,end操作后将向客户端浏览器发送内容,并销毁request/response对象
七、多端口监听
在实际运用场景中,服务器可能需要监听不同host下的不同端口。比如,一个应用服务器,可能需要监听外网的服务端口,同时也需要监听内网的管理端口。在Swoole中,可以轻松的实现这样的功能。 Swoole提供了addlistener函数用于给服务器添加一个需要监听的host及port。关于函数的介绍官方文档已经说的比较清楚:多端口监听的使用
示例
server.php
注意:
1.如果是http协议,不能绑定多个http协议监听
2.如果要启用新的协议监听,必须单独调用set方法设置新的协议才会启用新协议
3.只有同种协议才会触发相同事件
示例
八、其他示例
Last updated
Was this helpful?