初探 Swoole -- 用 Swoole 启动一个 hello world

2020-03-21 14:29:47 1040 思小齐 思小齐

目录

  1. 初探 Swoole -- 用 Swoole 启动一个 hello world

  2. 内存的妙用 -- PHP终于可以 vs JAVA啦

  3. 初级应用 -- 实现用户注册登录 [撰写中]

  4. 展望 -- Swoole 的局限性分析及我个人的期待 [撰写中]




Old time sake

还记得我们第一个 PHP 程序吗?

<?php
echo "hello world";

把他保存到 hello.php, 访问 http://localhost/hello.php 就可以输出 hello world. 很多人就是这两行代码引入了 PHP 的大门.

Here we go

我们用 Swoole 来做一个

<?php
$http = new swoole_http_server('0.0.0.0', 80, SWOOLE_BASE);
$http->on('request', function(swoole_http_request $req, swoole_http_response $res) use($http) {
    $res->write("hello world");
    $res->end();
});

OK, 看出了吧, 不依赖框架/ ob_flush 等机制, Swoole 不能再使用 echo 作为输出方法了, 得使用$res->write(String $content)$res->end(String $endContent).

那么我们怎么访问它呢?
命令行启动

php app.php
# 你在代码里面 echo/var_dump/print(_r) 的内容将在这里输出

然后在浏览器打开 http://localhost/ 就可以得到 hello world 的输出.
可是发现了吗? http://localhost/http://localhost/xxx 都输出同样的内容.
如果我们只想让 php 在 http://localhost/ 下输出, 怎么写呢?

<?php
$http = new swoole_http_server('0.0.0.0', 80, SWOOLE_BASE);
$http->on('request', function(swoole_http_request $req, swoole_http_response $res) use($http) {
    if($req->server['request_uri'] == '/'){
        $res->write("hello world");
        $res->end();
        return;
    }
    $res->end('404');
    return;
});

\Swoole_http_request $req 包含了很多我们将来能用到的请求数据. 包括 $req->server, $req->get, $req->post, 数组结构, ->server的KEY 为小写

提前说个坑, swoole http request 对象的 server 数据不完整, 获取不到诸如 connection/origin 等头信息.

[本节完, 文字未校对, 程序待测试]