内容简介:Just for fun——基于Swoole做个小框架
swoole
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
总之,这个库让PHP可以常驻内存,并提供了http server,tcp server等功能。
docker-compose.xml
利用docker,快速生成带swoole扩展的PHP环境, salamanderphp-cli
这个镜像,默认运行的是目录下 server.php
文件
version: '2' services: php: image: salamandermh/salamanderphp-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
<?php $http = new swoole_http_server("0.0.0.0", 8888); // 定义常量 define("ROOT", getcwd()); define('APP', ROOT . '/app'); require ROOT . '/vendor/autoload.php'; $dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) { $prefix = 'App\Controller\\'; $r->addRoute('GET', '/', $prefix . 'IndexController:show'); }); $http->on("start", function ($server) { echo "Swoole http server is started at http://0.0.0.0:8888\n"; }); $http->on("request", function ($request, $response) use($dispatcher) { $response->header("X-Powered-By", "Salamander"); $_GET = $request->get; $_POST = $request->post; $_SERVER = $request->server; $_COOKIE = $request->cookie; $_FILES = $request->files; // Fetch method and URI from somewhere $httpMethod = $_SERVER['request_method']; $uri = $_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 FastRoute\Dispatcher::NOT_FOUND: // ... 404 Not Found break; case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: $allowedMethods = $routeInfo[1]; // ... 405 Method Not Allowed break; case FastRoute\Dispatcher::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内置写法不一样。
测试
打包下载
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 基于Google MVVM框架的baseMVVM框架
- Spring 框架是怎么出生的(二):重构提炼出框架
- Spring 框架是怎么出生的(二):重构提炼出框架
- Genesis框架从入门到精通(7): 框架的过滤器
- 如何打造自己的POC框架-Pocsuite3-框架篇
- 如何打造自己的PoC框架-Pocsuite3-框架篇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员的职业素养
Robert C.Martin / 章显洲、余晟 / 人民邮电出版社 / 2012-9-1 / 49.00元
本书是编程大师Bob 大叔40 余年编程生涯的心得体会, 讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。 本书适合所有程序员,也可供所有想成为具备职业素养的职场人士参考。一起来看看 《程序员的职业素养》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
HTML 编码/解码
HTML 编码/解码