亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

TCP 服務

TCP 基礎 Demo

EasySwoole 創建 TCP 服務器,有兩種以下方式:

1.將 TCP 服務作為 EasySwoole 的主服務。

首先修改配置文件中 MAIN_SERVER.SERVER_TYPE 配置項為 EASYSWOOLE_SERVER

然后在 EasySwooleEventmainServerCreate 事件中注冊回調,注冊參考示例如下:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use Swoole\Server as SwooleServer;

class EasySwooleEvent implements Event
{
    // ...

    public static function mainServerCreate(EventRegister $register)
    {
        $register->add($register::onConnect, function (SwooleServer $server, int $fd, int $reactorId) {
            echo "fd{$fd} connected\n";
        });

        $register->add($register::onReceive, function (SwooleServer $server, int $fd, int $reactorId, string $data) {
            echo "fd:{$fd} receive_data:{$data}\n";
        });

        $register->add($register::onClose, function (SwooleServer $server, int $fd, int $reactorId) {
            echo "fd {$fd} closed\n";
        });
    }
}

2.將 TCP 服務作為 EasySwoole 的子服務。顧名思義:另外開一個端口進行 tcp 監聽。

EasySwooleEvent 中的 mainServerCreate 事件中進行子服務監聽,參考代碼如下:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use Swoole\Server as SwooleServer;

class EasySwooleEvent implements Event
{
    // ...

    public static function mainServerCreate(EventRegister $register)
    {
        // ....

        $server = ServerManager::getInstance()->getSwooleServer();
        $subPort = $server->addlistener('0.0.0.0', 9502, SWOOLE_TCP);

        $subPort->set([
            // swoole 相關配置
            'open_length_check' => false,
        ]);

        $subPort->on($register::onConnect, function (SwooleServer $server, int $fd, int $reactorId) {
            echo "fd {$fd} connected\n";
        });

        $subPort->on($register::onReceive, function (SwooleServer $server, int $fd, int $reactorId, string $data) {
            echo "fd:{$fd} received_data:{$data}\n";
        });

        $subPort->on($register::onClose, function (SwooleServer $server, int $fd, int $reactorId) {
            echo "fd {$fd} closed\n";
        });
    }
}

如何處理粘包

1.解決思路

  • 方法1:通過標識 EOF,例如 http 協議,通過 \r\n\r\n 的方式去表示該數據已經完結,我們可以自定義一個協議。例如當接收到 "結尾666" 字符串時,代表該字符串已經結束,如果沒有獲取到,則存入緩沖區,等待結尾字符串,或者如果獲取到多條,則通過該字符串剪切出其他數據。

  • 方法2:定義消息頭,通過特定長度的消息頭進行獲取。例如我們定義一個協議,前面 10 位字符串都代表著之后數據主體的長度,那么我們傳輸數據時,只需要 000000000512346 (前10位為協議頭,表示了這條數據的大小,后面的為數據),每次我們讀取只先讀取10位,獲取到消息長度,再讀取消息長度那么多的數據,這樣就可以保證數據的完整性了。(但是為了不被混淆,協議頭也得像 EOF 一樣標識)

  • 方法3:通過 pack 二進制處理,相當于于方法2,將數據通過二進制封裝拼接進消息中,通過驗證二進制數據去讀取信息,swoole 采用的就是這種方式。

主站蜘蛛池模板: 人人射 | 国产91在线观看 | 欧美毛片免费看 | 欧美精品二区三区四区免费看视频 | 日韩欧美一区二区三 | 日韩视频区 | 日本一区二区视频在线播放 | 日韩一区二区免费在线观看 | 精品国产乱码一区二区三区 | www.色网| 一区二区高清视频 | 麻豆国产精品视频 | 91视频精品 | 深夜福利免费在线观看 | 国产不卡在线观看 | 极品美女极度色诱视频天美 | 色小姐综合网 | 成人毛片区 | 中文字幕一区二区三 | 久操视频免费看 | 欧美激情一区 | 韩国电影和日本电影在线免费观看 | 九九热视频在线播放 | 亚洲天堂免费在线 | 国产午夜在线 | 福利一区在线观看 | 日韩精品中文字幕一区二区三区 | sis色中色 | 性色av浪潮 | 国产精品一二三区视频出来一 | 日本国产在线观看 | 茄子成人看a∨片免费软件 青草av.久久免费一区 | 国产99久久久国产精品免费 | 亚洲一区二区三区精品视频 | 精品欧美一二三区 | 三级黄色免费观看 | 亚洲毛片免费 | 一级免费网站 | 欧美精品一区二区三区免费视频 | 欧美亚洲网站 | 亚洲欧美字幕 |