黄p网站_在线看中文字幕_亚洲电影免费观看_成人激情视频_欧美成视频_中国av在线

Socket 控制器

組件安裝

composer require easyswoole/socket

Examples

關(guān)于 Socket 控制器使用的具體示例,請(qǐng)查看 demo

包解析與控制器邏輯

數(shù)據(jù)解析與控制器映射

數(shù)據(jù)解析和控制器映射,開(kāi)發(fā)者可以通過(guò)實(shí)現(xiàn) \EasySwoole\Socket\AbstractInterface\ParserInterface 接口的來(lái)實(shí)現(xiàn),然后在 encode 方法中實(shí)現(xiàn)數(shù)據(jù)解析和控制器映射。使用方法可以參考下面的示例。

下面以實(shí)現(xiàn)一個(gè) tcp socket 控制器為例。首先定義協(xié)議解析器類 TcpParser 類,該類需要實(shí)現(xiàn) \EasySwoole\Socket\AbstractInterface\ParserInterface 接口。如下:

<?php
namespace App\Parser;

use EasySwoole\Socket\AbstractInterface\ParserInterface;
use EasySwoole\Socket\Bean\Caller;

class TcpParser implements ParserInterface
{
    public function decode($raw, $client): ?Caller
    {
        // 數(shù)據(jù)解析,這里采用簡(jiǎn)單的json格式作為應(yīng)用層協(xié)議
        $data       = substr($raw, 4);
        $data       = json_decode($data, true);

        // 實(shí)現(xiàn)與控制器和action的映射
        $caller     = new Caller();
        $controller = !empty($data['controller']) ? $data['controller'] : 'Index';
        $action     = !empty($data['action']) ? $data['action'] : 'index';
        $param      = !empty($data['param']) ? $data['param'] : [];
        $controller = "App\\TcpController\\{$controller}";
        $caller->setControllerClass($controller);
        $caller->setAction($action);
        $caller->setArgs($param);
        return $caller;
    }

    // ... encode 方法
}

數(shù)據(jù)的打包與響應(yīng)

對(duì)于數(shù)據(jù)的打包,開(kāi)發(fā)者可以通過(guò)實(shí)現(xiàn) \EasySwoole\Socket\AbstractInterface\ParserInterface 接口的來(lái)實(shí)現(xiàn),然后在 decode 方法中實(shí)現(xiàn)數(shù)據(jù)的打包。使用方法可以參考下面的示例。

<?php
namespace App\Parser;

use EasySwoole\Socket\AbstractInterface\ParserInterface;
use EasySwoole\Socket\Bean\Response;

class TcpParser implements ParserInterface
{
    // ... decode 方法

    public function encode(Response $response, $client): ?string
    {
        // 實(shí)現(xiàn)對(duì)數(shù)據(jù)的打包
        return pack('N', strlen(strval($response->getMessage()))) . $response->getMessage();
    }
}

關(guān)于對(duì)數(shù)據(jù)的響應(yīng),則需要開(kāi)發(fā)者在控制器的 action 進(jìn)行處理,調(diào)用 $this->response()->setMessage($message) 進(jìn)行響應(yīng)調(diào)用端。參考示例如下:

<?php
namespace App\TcpController;

use EasySwoole\Socket\AbstractInterface\Controller;

class Index extends Controller
{
    public function index()
    {
        // 這里我們響應(yīng)一個(gè)字符串'this is index'給調(diào)用端
        $this->response()->setMessage('this is index');
    }
}
主站蜘蛛池模板: 亚洲精品视频在线 | 精品国产91乱码一区二区三区 | 久久在线 | 成人欧美一区二区三区在线播放 | 免费的一级黄色片 | 天天操天天草 | 91中文字幕 | 国产成人综合在线 | 9久久婷婷国产综合精品性色 | 日韩欧美国产一区二区 | 一级片| 久草日本 | 操操操干干干 | 午夜一级毛片 | 狠狠色综合色综合网络 | 在线视频一区二区 | 亚洲精品乱码久久久久久蜜桃91 | 国产高清久久 | 免费网站国产 | 视色视频在线观看 | 亚洲成人三级 | 一区二区欧美在线 | 色婷婷精品国产一区二区三区 | 国产一区二区精品在线 | 精品久久久久久久久久久久久久 | 久久99久久99精品 | 久草视频在线播放 | 91一区二区在线 | 午夜激情视频免费 | 久久色av | 欧美激情精品 | 天天天堂 | 国产免费久久 | 国产一区二区三区在线 | 成人免费视频网 | 欧美一级黄| 欧美视频二区 | 国产精品久久久久久久久久东京 | 欧洲国产伦久久久久久久 | 日韩毛片免费视频一级特黄 | 蜜桃av一区二区三区 |