【swoole】两种方式创建http服务

在这里简述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_response_body

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

HTTP/1.1 200
Server:SwooleServer
Content-Type:text/html;charset=utf8
Content-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作为代理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值