成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

EasySwoole如何安裝使用

小編給大家分享一下EasySwoole如何安裝使用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供靜樂(lè)企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為靜樂(lè)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

EasySwoole

EasySwoole 是一款基于Swoole Server 開(kāi)發(fā)的常駐內(nèi)存型的分布式PHP框架,專為API而生,擺脫傳統(tǒng)PHP運(yùn)行模式在進(jìn)程喚起和文件加載上帶來(lái)的性能損失。 EasySwoole 高度封裝了 Swoole Server 而依舊維持 Swoole Server 原有特性,支持同時(shí)混合監(jiān)聽(tīng)HTTP、自定義TCP、UDP協(xié)議,讓開(kāi)發(fā)者以最低的學(xué)習(xí)成本和精力編寫(xiě)出多進(jìn)程,可異步,高可用的應(yīng)用服務(wù)

安裝

  • 保證 PHP 版本大于等于 7.1

  • 保證 Swoole 拓展版本大于等于 4.4.15

  • 需要 pcntl 拓展的任意版本

  • 使用 Linux / FreeBSD / MacOS 這三類操作系統(tǒng)

  • 使用 Composer 作為依賴管理工具

composer require easyswoole/easyswoole=3.x
php vendor/easyswoole/easyswoole/bin/easyswoole install

  • 新版的easyswoole安裝會(huì)默認(rèn)提供App命名空間,還有index控制器

  • 在這里面需要填寫(xiě)n,不需要覆蓋,已經(jīng)有的 EasySwooleEvent.php,index.php dev.php produce.php

  • 當(dāng)提示exec函數(shù)被禁用時(shí),請(qǐng)自己手動(dòng)執(zhí)行 composer dump-autoload 命令更新命名空間

進(jìn)入項(xiàng)目根目錄執(zhí)行程序,項(xiàng)目執(zhí)行成功,訪問(wèn)頁(yè)面

php easyswoole start

HTTP

HttpController為控制器根目錄,訪問(wèn)會(huì)根據(jù)url自動(dòng)映射到此目錄的控制器中,Index作為默認(rèn)控制器,index為默認(rèn)方法

訪問(wèn)http://192.168.88.16:9501地址為默認(rèn)訪問(wèn)到index.php控制器中index方法,即http://192.168.88.16:9501/index/index地址與tp框架的訪問(wèn)相類似

  • 我們?cè)?code>index控制器中新建一個(gè)hello方法,打印hello world,重新啟動(dòng)項(xiàng)目,訪問(wèn)http://192.168.88.16:9501/hellohttp://192.168.88.16:9501/index/hello頁(yè)面都會(huì)打印hello world

<?phpnamespace App\HttpController;use EasySwoole\Http\AbstractInterface\Controller;class Index extends Controller{
 public function hello(){
        $this->response()->write('hello world');
    }

    public function index()
    {
        $file = EASYSWOOLE_ROOT.'/vendor/easyswoole/easyswoole/src/Resource/Http/welcome.html';
        if(!is_file($file)){
            $file = EASYSWOOLE_ROOT.'/src/Resource/Http/welcome.html';//歡迎頁(yè)面
        }
        $this->response()->write(file_get_contents($file));
    }

    protected function actionNotFound(?string $action)
    {
        $this->response()->withStatus(404);
        $file = EASYSWOOLE_ROOT.'/vendor/easyswoole/easyswoole/src/Resource/Http/404.html';
        if(!is_file($file)){
            $file = EASYSWOOLE_ROOT.'/src/Resource/Http/404.html';
        }
        $this->response()->write(file_get_contents($file));
    }}

WebSocket

WebSocket協(xié)議在傳統(tǒng)的phpweb框架就不適用了,在php中基本就使用workerman和swoole去解決這種場(chǎng)景,在easyswoole框架即是swoole的封裝

  • dev.php配置文件,將服務(wù)類型SERVER_TYPE修改為EASYSWOOLE_WEB_SOCKET_SERVER,進(jìn)行WebSocket通訊,EasySwooleEvent.php文件中,新增主服務(wù)增加onMessage事件監(jiān)聽(tīng)消息

<?phpnamespace EasySwoole\EasySwoole;use EasySwoole\EasySwoole\Swoole\EventRegister;use EasySwoole\EasySwoole\AbstractInterface\Event;use EasySwoole\Http\Request;use EasySwoole\Http\Response;class EasySwooleEvent implements Event{

    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        // TODO: Implement mainServerCreate() method.\
        $register->set(EventRegister::onMessage,function (\swoole_websocket_server $server, \swoole_websocket_frame $frame){
            var_dump($frame);
        });
    }

    public static function onRequest(Request $request, Response $response): bool    {
        // TODO: Implement onRequest() method.
        return true;
    }

    public static function afterRequest(Request $request, Response $response): void    {
        // TODO: Implement afterAction() method.
    }}
  • 使用easyswoole的測(cè)試工具進(jìn)行連接測(cè)試

WebSocket控制器

在WebSocket,一般都是在一個(gè)onmessage中寫(xiě)響應(yīng)代碼,業(yè)務(wù)復(fù)雜的情況下一個(gè)方法中非常的冗長(zhǎng),easyswoole提供一種類似控制器方式的寫(xiě)法,這里已官方的例子為例:

  • 安裝拓展包

composer require easyswoole/socket

dev.php,修改SERVER_TYPE為:

‘SERVER_TYPE’ => EASYSWOOLE_WEB_SOCKET_SERVER,

注冊(cè)服務(wù):

public static function mainServerCreate(EventRegister $register): void{
    /**
     * **************** websocket控制器 **********************
     */
    // 創(chuàng)建一個(gè) Dispatcher 配置
    $conf = new \EasySwoole\Socket\Config();
    // 設(shè)置 Dispatcher 為 WebSocket 模式
    $conf->setType(\EasySwoole\Socket\Config::WEB_SOCKET);
    // 設(shè)置解析器對(duì)象
    $conf->setParser(new WebSocketParser());
    // 創(chuàng)建 Dispatcher 對(duì)象 并注入 config 對(duì)象
    $dispatch = new Dispatcher($conf);
    // 給server 注冊(cè)相關(guān)事件 在 WebSocket 模式下  on message 事件必須注冊(cè) 并且交給 Dispatcher 對(duì)象處理
    $register->set(EventRegister::onMessage, function (\swoole_websocket_server $server, \swoole_websocket_frame $frame) use ($dispatch) {
        $dispatch->dispatch($server, $frame->data, $frame);
    });}

創(chuàng)建App/WebSocket/WebSocketParser.php文件

namespace App\WebSocket;use EasySwoole\Socket\AbstractInterface\ParserInterface;use EasySwoole\Socket\Client\WebSocket;use EasySwoole\Socket\Bean\Caller;use EasySwoole\Socket\Bean\Response;/**
 * Class WebSocketParser
 *
 * 此類是自定義的 websocket 消息解析器
 * 此處使用的設(shè)計(jì)是使用 json string 作為消息格式
 * 當(dāng)客戶端消息到達(dá)服務(wù)端時(shí),會(huì)調(diào)用 decode 方法進(jìn)行消息解析
 * 會(huì)將 websocket 消息 轉(zhuǎn)成具體的 Class -> Action 調(diào)用 并且將參數(shù)注入
 *
 * @package App\WebSocket
 */class WebSocketParser implements ParserInterface{
    /**
     * decode
     * @param  string         $raw    客戶端原始消息
     * @param  WebSocket      $client WebSocket Client 對(duì)象
     * @return Caller         Socket  調(diào)用對(duì)象
     */
    public function decode($raw, $client) : ? Caller    {
        // 解析 客戶端原始消息
        $data = json_decode($raw, true);
        if (!is_array($data)) {
            echo "decode message error! \n";
            return null;
        }

        // new 調(diào)用者對(duì)象
        $caller =  new Caller();
        /**
         * 設(shè)置被調(diào)用的類 這里會(huì)將ws消息中的 class 參數(shù)解析為具體想訪問(wèn)的控制器
         * 如果更喜歡 event 方式 可以自定義 event 和具體的類的 map 即可
         * 注 目前 easyswoole 3.0.4 版本及以下 不支持直接傳遞 class string 可以通過(guò)這種方式
         */
        $class = '\\App\\WebSocket\\'. ucfirst($data['class'] ?? 'Index');
        $caller->setControllerClass($class);

        // 提供一個(gè)事件風(fēng)格的寫(xiě)法//         $eventMap = [//             'index' => Index::class//         ];//         $caller->setControllerClass($eventMap[$data['class']] ?? Index::class);

        // 設(shè)置被調(diào)用的方法
        $caller->setAction($data['action'] ?? 'index');
        // 檢查是否存在args
        if (!empty($data['content'])) {
            // content 無(wú)法解析為array 時(shí) 返回 content => string 格式
            $args = is_array($data['content']) ? $data['content'] : ['content' => $data['content']];
        }

        // 設(shè)置被調(diào)用的Args
        $caller->setArgs($args ?? []);
        return $caller;
    }
    /**
     * encode
     * @param  Response     $response Socket Response 對(duì)象
     * @param  WebSocket    $client   WebSocket Client 對(duì)象
     * @return string             發(fā)送給客戶端的消息
     */
    public function encode(Response $response, $client) : ? string    {
        /**
         * 這里返回響應(yīng)給客戶端的信息
         * 這里應(yīng)當(dāng)只做統(tǒng)一的encode操作 具體的狀態(tài)等應(yīng)當(dāng)由 Controller處理
         */
        return $response->getMessage();
    }}

創(chuàng)建App/WebSocket/Index.php文件

composer require easyswoole/task

<?php/**
 * Created by PhpStorm.
 * User: Apple
 * Date: 2018/11/1 0001
 * Time: 14:42
 */namespace App\WebSocket;use EasySwoole\EasySwoole\ServerManager;use EasySwoole\EasySwoole\Task\TaskManager;use EasySwoole\Socket\AbstractInterface\Controller;/**
 * Class Index
 *
 * 此類是默認(rèn)的 websocket 消息解析后訪問(wèn)的 控制器
 *
 * @package App\WebSocket
 */class Index extends Controller{
    function hello()
    {
        $this->response()->setMessage('call hello with arg:'. json_encode($this->caller()->getArgs()));
    }

    public function who(){
        $this->response()->setMessage('your fd is '. $this->caller()->getClient()->getFd());
    }

    function delay()
    {
        $this->response()->setMessage('this is delay action');
        $client = $this->caller()->getClient();

        // 異步推送, 這里直接 use fd也是可以的
        TaskManager::getInstance()->async(function () use ($client){
            $server = ServerManager::getInstance()->getSwooleServer();
            $i = 0;
            while ($i < 5) {
                sleep(1);
                $server->push($client->getFd(),'push in http at '. date('H:i:s'));
                $i++;
            }
        });
    }}
  • websocket測(cè)試工具進(jìn)行測(cè)試,進(jìn)行提交的json自動(dòng)到相應(yīng)的控制器方法中進(jìn)行處理

看完了這篇文章,相信你對(duì)“EasySwoole如何安裝使用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文名稱:EasySwoole如何安裝使用
當(dāng)前地址:http://jinyejixie.com/article0/podeio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站收錄、企業(yè)建站、關(guān)鍵詞優(yōu)化網(wǎng)站策劃、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
东源县| 克东县| 武平县| 莎车县| 突泉县| 中超| 开鲁县| 宁晋县| 黔西县| 新乡县| 大名县| 西平县| 道真| 佳木斯市| 深州市| 夏邑县| 丹巴县| 西宁市| 汾西县| 铜山县| 芜湖县| 建德市| 石门县| 永福县| 唐河县| 郸城县| 鸡西市| 白山市| 法库县| 绍兴市| 邢台县| 永胜县| 南雄市| 五大连池市| 什邡市| 新龙县| 济阳县| 玉门市| 长沙市| 特克斯县| 江永县|