资讯专栏INFORMATION COLUMN

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

fevin / 2682人阅读

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

swoole

</>复制代码

  1. 使 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文件

</>复制代码

  1. version: "2"
  2. services:
  3. php:
  4. image: salamandermh/php-cli:1.0
  5. volumes:
  6. - ./src:/var/www
  7. - ./php/php.ini:/usr/local/etc/php/php.ini
  8. ports:
  9. - 8888:8888
路由分发

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

server.php

</>复制代码

  1. addRoute("GET", "/", $prefix . "IndexController:show");
  2. });
  3. $http->on("start", function ($server) {
  4. echo "Swoole http server is started at http://0.0.0.0:8888
  5. ";
  6. });
  7. $http->on("request", function ($request, $response) use($dispatcher) {
  8. $response->header("X-Powered-By", "Salamander");
  9. // Fetch method and URI from somewhere
  10. $httpMethod = $request->server["request_method"];
  11. $uri = $request->server["request_uri"];
  12. // Strip query string (?foo=bar) and decode URI
  13. if (false !== $pos = strpos($uri, "?")) {
  14. $uri = substr($uri, 0, $pos);
  15. }
  16. $uri = rawurldecode($uri);
  17. $res = "";
  18. $routeInfo = $dispatcher->dispatch($httpMethod, $uri);
  19. switch ($routeInfo[0]) {
  20. case FastRouteDispatcher::NOT_FOUND:
  21. // ... 404 Not Found
  22. break;
  23. case FastRouteDispatcher::METHOD_NOT_ALLOWED:
  24. $allowedMethods = $routeInfo[1];
  25. // ... 405 Method Not Allowed
  26. break;
  27. case FastRouteDispatcher::FOUND:
  28. $handler = $routeInfo[1];
  29. $vars = $routeInfo[2];
  30. $parts = explode(":", $handler);
  31. $controller = new $parts[0];
  32. $method = $parts[1];
  33. $res = call_user_func_array(array($controller, $method), [$vars]);
  34. break;
  35. }
  36. $response->end($res);
  37. });
  38. $http->start();

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

测试

打包下载

swoole-test

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

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

相关文章

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

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

    CoreDump 评论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元查看
<