1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 Swoole 分布式通讯框架 SwooleDistributed 2.6 正式版发布 下载

本帖由 漂亮的石头2017-10-18 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    488,069
    赞:
    47
    SwooleDistributed2.6正式版发布

    本次发布的版本包含几个重大功能更新。

    1.中间件模块

    SD框架引入了中间件过程,消息的传递流程如下。

    message->pack->middleware1(before)->middleware2(before)->...->route->controller->...->middleware2(after)->middleware1(after)

    中间件作用于每一个端口配置,也就是说不同的端口可以单独配置中间件。
    中间件的执行严格按照数据的顺序执行。

    $config['ports'][] = [
    'socket_type' => PortManager::SOCK_HTTP,
    'socket_name' => '0.0.0.0',
    'socket_port' => 8081,
    'route_tool' => 'NormalRoute',
    'middlewares' => ['MonitorMiddleware', 'NormalHttpMiddleware']
    ];

    如上图执行顺序为MonitorMiddleware(before)->NormalHttpMiddleware(before)->...->NormalHttpMiddleware(after)->MonitorMiddleware(after).

    2.运行链路追踪

    Array
    (
    [RunStack] => Array
    (
    [0] => Server\Middlewares\MonitorMiddleware::before_handle
    [1] => Server\Middlewares\NormalHttpMiddleware::before_handle
    [2] => Server\Controllers\TestController::setRequestResponse
    [3] => Server\Controllers\TestController::http_testContext
    [4] => Server\Models\TestModel::contextTest
    [5] => Server\Tasks\TestTask::contextTest
    [6] => Server\CoreBase\TaskProxy::startTask
    [7] => Server\Models\TestModel::destroy
    [8] => Server\Controllers\TestController::destroy
    [9] => Server\Middlewares\NormalHttpMiddleware::after_handle
    [10] => Server\Middlewares\MonitorMiddleware::after_handle
    )

    [request_id] => 15081258371921825039
    [controller_name] => TestController
    [method_name] => TestController:http_testContext
    [test] => 1
    [path] => /TestController/testContext
    [execution_time] => 4.1890144348145
    )

    通过这个可以精确判断发生异常和错误的位置,也可以了解到SD框架的工作流程。

    你可以在AppServer的__construct方法中设置$this->setDebugMode()来开启这个打印。

    public function __construct()
    {
    $this->setLoader(new Loader());
    $this->setDebugMode();
    parent::__construct();
    }

    3.Context上下文

    上下文共享

    middleware,controller,model,task,在一个消息流程中共享同一个上下文Context。

    其中middleware,controller,model可以修改Context,而task只能读取不能修改。

    例如MonitorMiddleware

    public function after_handle($path)
    {
    $this->context['path'] = $path;
    $this->context['execution_time'] = (microtime(true) - $this->start_run_time) * 1000;
    if (self::$efficiency_monitor_enable) {
    $this->log('Monitor');
    }
    }

    这里将context附加了path和execution_time,在after_handle流程前所有对context的操作都会影响到这里的context。

    通过getContext获取当前的上下文。

    4.AOP

    面向切片的编程。

    SD的面向切片提供了基础框架,通过继承AOP类或者实现IAOP接口可以支持实现面向切片编程。可能实现方法和主流的AOP不太一样。

    Controller和Model,Task等SD重要组件都已经实现AOP化。

    以Model为例,实现自己的AOP代理

    <?php

    namespace Server\Models;

    use Server\CoreBase\ChildProxy;
    use Server\CoreBase\Model;
    use Server\CoreBase\SwooleException;

    class TestModel extends Model
    {

    public function __construct()
    {
    parent::__construct(TestModelProxy::class);
    }

    public function initialization(&$context)
    {
    parent::initialization($context);
    }

    public function timerTest()
    {
    print_r("model timer\n");
    }

    }

    class TestModelProxy extends ChildProxy
    {
    public function beforeCall($name, $arguments = null)
    {
    var_dump("before");
    }

    public function afterCall($name, $arguments = null)
    {
    var_dump("after");
    }
    }

    目前AOP的整体框架还在完善中,请期待后面的版本更新。
    Swoole 分布式通讯框架 SwooleDistributed 2.6 正式版发布下载地址
     
正在加载...