资讯专栏INFORMATION COLUMN

Just for fun——基于Swoole做个小框架

CoreDump / 1605人阅读

摘要:使开发人员可以编写高性能的异步并发,服务。使用作为网络通信框架,可以使企业研发团队的效率大大提升,更加专注于开发创新产品。总之,这个库让可以常驻内存,并提供了,等功能。

swoole
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

总之,这个库让PHP可以常驻内存,并提供了http server,tcp server等功能。

docker-compose.xml

利用docker,快速生成带swoole扩展的PHP环境,php-cli
这个镜像,默认运行的是目录下public目录中server.php文件

version: "2"
services:
  php:
    image: salamandermh/php-cli:1.0
    volumes:
      - ./src:/var/www
      - ./php/php.ini:/usr/local/etc/php/php.ini
    ports: 
      - 8888:8888
路由分发

因为swoole提供了http server的功能,所以swoole会告诉我们当前$uri,$http_method这些量,所哟路由库继续可以用来分发$uri,这里选用了FastRoute,当然,别的库肯定也是可以的。

server.php
addRoute("GET", "/", $prefix . "IndexController:show");
});


$http->on("start", function ($server) {
    echo "Swoole http server is started at http://0.0.0.0:8888
";
});

$http->on("request", function ($request, $response) use($dispatcher) {
    $response->header("X-Powered-By", "Salamander");

    // Fetch method and URI from somewhere
    $httpMethod = $request->server["request_method"];
    $uri = $request->server["request_uri"];

    // Strip query string (?foo=bar) and decode URI
    if (false !== $pos = strpos($uri, "?")) {
        $uri = substr($uri, 0, $pos);
    }
    $uri = rawurldecode($uri);
    $res = "";

    $routeInfo = $dispatcher->dispatch($httpMethod, $uri);
    switch ($routeInfo[0]) {
        case FastRouteDispatcher::NOT_FOUND:
            // ... 404 Not Found
            break;
        case FastRouteDispatcher::METHOD_NOT_ALLOWED:
            $allowedMethods = $routeInfo[1];
            // ... 405 Method Not Allowed
            break;
        case FastRouteDispatcher::FOUND:
            $handler = $routeInfo[1];
            $vars = $routeInfo[2];
            $parts = explode(":", $handler);
            $controller = new $parts[0];
            $method = $parts[1];
            $res = call_user_func_array(array($controller, $method), [$vars]);
            break;
    }
    $response->end($res);
});

$http->start();

注意一下,$request->server中request_method和request_uri都是小写的key,这和PHP内置写法不一样。
swoole文档

测试

打包下载

swoole-test

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39762.html

相关文章

  • Just for fun——基于Swoole个小框架

    摘要:使开发人员可以编写高性能的异步并发,服务。使用作为网络通信框架,可以使企业研发团队的效率大大提升,更加专注于开发创新产品。总之,这个库让可以常驻内存,并提供了,等功能。 swoole 使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(...

    fevin 评论0 收藏0
  • Just for fun——Docker做个NMP环境

    摘要:总之,是用来管理多个容器的,用都会写一个开启所有服务关闭所有服务上面说了,关键是编排好,以下就是的目录结构访问在目录下运行命令,在浏览器访问可以看到讲解和都是用了官方的镜像,而是从本地构建的。 Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,...

    用户84 评论0 收藏0
  • Just for fun——Docker做个NMP环境

    摘要:总之,是用来管理多个容器的,用都会写一个开启所有服务关闭所有服务上面说了,关键是编排好,以下就是的目录结构访问在目录下运行命令,在浏览器访问可以看到讲解和都是用了官方的镜像,而是从本地构建的。 Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,...

    Apollo 评论0 收藏0
  • Just for fun——Docker做个NMP环境

    摘要:总之,是用来管理多个容器的,用都会写一个开启所有服务关闭所有服务上面说了,关键是编排好,以下就是的目录结构访问在目录下运行命令,在浏览器访问可以看到讲解和都是用了官方的镜像,而是从本地构建的。 Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,...

    eccozhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<