分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

swoole的http服务

发布时间:2023-09-06 02:25责任编辑:郭大石关键词:http

引用Swoole官方定义:

PHP语言的异步、并行、高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

在这里简述swoole两种API编写简单HTTP服务器。

swoole_server

使用swoole_server API,构建HTTP服务器,4个步骤:

  1. 构建Server对象
  2. 设置运行时参数
  3. 注册事件回调函数
  4. 启动服务器

直接代码体现,新建server.php

<?php//1.构建Server对象$serv = new swoole_server("0.0.0.0", 9501);//2.设置运行时参数$serv->set(array( ???‘worker_num‘ => 8, ???‘daemonize‘ => 0, ???‘max_request‘ => 10000, ???‘dispatch_mode‘ => 2, ???‘debug_mode‘=> 1,));//3.注册事件回调函数$serv->on(‘Receive‘, function($serv, $fd, $from_id, $data){ ???$respData=‘<h1>Hello Swoole.</h1>‘; ???response($serv,$fd,$respData);//封装并发送HTTP响应报文});//4.启动服务器$serv->start();

如何封装HTTP响应报文?首先你得知道HTTP响应报文的组成结构,如下图

知道了响应报文的组成结构,那我的响应报文应该是这样的:

HTTP/1.1 200Server:SwooleServerContent-Type:text/html;charset=utf8Content-Length:13<h1>Hello Swoole.</h1>

代码实现。

/*** 发送内容* @param \swoole_server $serv* @param int $fd* @param string $respData* @return void*/function response($serv,$fd,$respData){ ???//响应行 ???$response = array( ???????‘HTTP/1.1 200‘, ???); ???//响应头 ???$headers = array( ???????‘Server‘=>‘SwooleServer‘, ???????‘Content-Type‘=>‘text/html;charset=utf8‘, ???????‘Content-Length‘=>strlen($respData), ???); ???foreach($headers as $key=>$val){ ???????$response[] = $key.‘:‘.$val; ???} ???//空行 ???$response[] = ‘‘; ???//响应体 ???$response[] = $respData; ???$send_data = join("\r\n",$response); ???$serv->send($fd, $send_data);}

到此,一个简单响应Hello Swoole.的HTTP服务器就完成了。完整代码:
(访问不了gist?配置本地hosts文件: 192.30.252.141 gist.github.com )

运行 php server.php,浏览器访问http://127.0.0.1:9501/,当然我们常常使用Nginx作为前端代理,设一个测试域名www.server.com,本地设置hosts映射,就能通过域名来访问了。Nginx配置
注意:当响应报文格式不正确时,浏览器页面会一直转菊花,等待请求返回...

再后来,有了swoole_http_server,HTTP服务器代码就变得更加简单了!

swoole_http_server

<?php$http = new swoole_http_server("127.0.0.1", 9501);$http->on(‘request‘, function ($request, $response) { ???$html = "<h1>Hello Swoole.</h1>"; ???$response->end($html);});

没错,就这几行代码就实现了。不再需要封装响应报文。swoole_http_server 继承于 swoole_server,是swoole内置Http服务器的支持,通过几行代码即可写出一个异步非阻塞多进程的Http服务器。

Notice:swoole_http_server对Http协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理

swoole的http服务

原文地址:https://www.cnblogs.com/kevin-yang123/p/10083528.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved