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

栏目: PHP · 发布时间: 8年前

内容简介: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内置写法不一样。

swoole文档

测试

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

打包下载

swoole-test


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux Device Drivers

Linux Device Drivers

Jonathan Corbet、Alessandro Rubini、Greg Kroah-Hartman / O'Reilly Media / 2005-2-17 / USD 39.95

Device drivers literally drive everything you're interested in--disks, monitors, keyboards, modems--everything outside the computer chip and memory. And writing device drivers is one of the few areas ......一起来看看 《Linux Device Drivers》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具