php swoole 物联网开发框架,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环境,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

$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");

// 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 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文档

测试

bV2kUX?w=448&h=322

打包下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值