国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

多協(xié)議支持

需求

有時(shí)我們需要一套應(yīng)用程序支持多個(gè)客戶端,進(jìn)而需要應(yīng)用支持多個(gè)協(xié)議。例如一個(gè)IM即時(shí)通訊應(yīng)用,可能需要同時(shí)支持瀏覽器使用,又要支持移動(dòng)App客戶端。而二者所使用的協(xié)議可能完全不同。

如何支持多協(xié)議

在WorkerMan中最簡(jiǎn)單的實(shí)現(xiàn)方法是開(kāi)啟多個(gè)端口,每個(gè)端口使用一種協(xié)議。不同客戶端使用各自的協(xié)議去連特定的端口。

示例(小蝌蚪)

小蝌蚪應(yīng)用程序是運(yùn)行在PC瀏覽器里面的,使用Websocket協(xié)議與WorkerMan通訊,當(dāng)我們需要把它移植到手機(jī)App上卻沒(méi)有合適的客戶端Websocket庫(kù)時(shí),我們可以使用更簡(jiǎn)單的協(xié)議來(lái)實(shí)現(xiàn)App與WorkerMan通訊,例如Text文本協(xié)議(協(xié)議規(guī)則為 文本+換行符)。

下面是開(kāi)啟多端口支持多協(xié)議示例

創(chuàng)建新文件 Applications/Todpole/start_text_gateway.php

use \Workerman\Worker;
use \GatewayWorker\Gateway;

// 自動(dòng)加載類
require_once __DIR__ . '/../../Workerman/Autoloader.php';

// ##########新增端口支持Text協(xié)議 開(kāi)始##########
// 新增8283端口,開(kāi)啟Text文本協(xié)議
$gateway_text = new Gateway("Text://0.0.0.0:8283");
// 進(jìn)程名稱,主要是status時(shí)方便識(shí)別
$gateway_text->name = 'TodpoleGatewayText';
// 開(kāi)啟多少text協(xié)議的gateway進(jìn)程
$gateway_text->count = 4;
// 本機(jī)ip(分布式部署時(shí)需要設(shè)置成內(nèi)網(wǎng)ip)
$gateway_text->lanIp = '127.0.0.1';
// 設(shè)置服務(wù)注冊(cè)地址(注意:這個(gè)地址是start_register.php中監(jiān)聽(tīng)的地址)
$gateway_text->registerAddress = '127.0.0.1:1237';
// gateway內(nèi)部通訊起始端口,起始端口不要重復(fù)
$gateway_text->startPort = 2500;
// 也可以設(shè)置心跳,這里省略
// ##########新增端口支持Text協(xié)議 結(jié)束##########

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

重新啟動(dòng)

測(cè)試效果

由于是Text文本協(xié)議,我們可以通過(guò)telnet命令方便的模擬文本協(xié)議客戶端。以下運(yùn)行telnet命令的結(jié)果

telnet 127.0.0.1 8283
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
{"type":"update","id":156,"angle":3.636,"momentum":0,"x":-64.8,"y":147.1,"life":1,"name":"Guest.156","authorized":false}
{"type":"update","id":156,"angle":4.27,"momentum":0,"x":-64.8,"y":147.1,"life":1,"name":"Guest.156","authorized":false}
{"type":"update","id":156,"angle":5.766,"momentum":0,"x":-64.8,"y":147.1,"life":1,"name":"Guest.156","authorized":false}
{"type":"update","id":156,"angle":6.284,"momentum":3,"x":-58.8,"y":146.7,"life":1,"name":"Guest.156","authorized":false}

我們能看到其它PC客戶端通過(guò)WorkerMan轉(zhuǎn)發(fā)來(lái)的蝌蚪的實(shí)時(shí)坐標(biāo)數(shù)據(jù),我們也可以輸入自己的坐標(biāo)數(shù)據(jù),然后按回車鍵,我們就能在小蝌蚪界面上看到自己了。這樣通過(guò)使用telnet客戶端+文本協(xié)議,我們可以方便的調(diào)試數(shù)據(jù),開(kāi)發(fā)新的客戶端了。

說(shuō)明:

以上是WorkerMan多協(xié)議支持示例,我們看到只需要簡(jiǎn)單的初始化端口及協(xié)議即可,服務(wù)端的業(yè)務(wù)代碼不用任何更改。開(kāi)發(fā)者也可以使用其它協(xié)議初始化端口,也可以參考《定制通訊協(xié)議章節(jié)》定義自己的協(xié)議

以上是Gateway/Worker模型的多協(xié)議支持示例,基于Worker的多協(xié)議也是同樣的道理

支持多協(xié)議還有其他的方法,比如通過(guò)協(xié)議自身的特點(diǎn)區(qū)分當(dāng)前是哪種協(xié)議,然后分別調(diào)用相應(yīng)協(xié)議的解碼方法,這樣可以做到只開(kāi)一個(gè)端口就可以支持多種協(xié)議的效果

編輯于2024-03-13 17:37:33 完善本頁(yè) +發(fā)起討論
贊助商