2020-11-05第二天swoole與網(wǎng)絡(luò)協(xié)議

1 查看swoole進(jìn)程

ps? -aux | grep swoole

0:0:0:0?全局沒有限制

127.0.0.1?當(dāng)前電腦能查看

192.168:255:255?本地局域網(wǎng)


2 異常問題

訪問異常:防火墻,服務(wù)未開啟?ip地址錯(cuò)誤

運(yùn)行異常:swoole沒有安裝成功,代碼錯(cuò)誤

進(jìn)程查詢?ps -aux? 文件名.php? ? 或者?php -aux *.php

安裝異常,查詢環(huán)境配置?


3?同步和異步

同步:執(zhí)行任務(wù)的時(shí)候必須是一步一步的執(zhí)行,不能同時(shí)執(zhí)行2個(gè)任務(wù),比如?走路的時(shí)候不能看書,看書的時(shí)候不能走路?事情只能一件一件的做

異步:執(zhí)行任務(wù)時(shí),可以同時(shí)執(zhí)行,比如走路時(shí)看書,看書的時(shí)候聽歌,事情可以同時(shí)做

同步:常見于隊(duì)列,必須一個(gè)一個(gè)的執(zhí)行?事例:下單操作防止超賣

異步:常見于消息發(fā)送,?事情不一定立即執(zhí)行,事例:下單完后給用戶發(fā)送消息


4?swoole加速框架

http-server服務(wù)?可以用于web項(xiàng)目開發(fā),也可以用于laravel和thinkPHP框架進(jìn)行加速

使用swoole加速框架 ,框架必須是IOC類型,因?yàn)閟woole是長駐內(nèi)存

加速的原理:將程序的變量放入到常駐內(nèi)存中,減少每次訪問時(shí)生產(chǎn)變量的時(shí)間

webSocket客戶端向服務(wù)器端發(fā)送信息時(shí),服務(wù)器端觸發(fā)?onMessage?事件回調(diào),服務(wù)器端可以調(diào)用?$server->push()?向某個(gè)客戶端(使用 $fd 標(biāo)識(shí)符)發(fā)送消息

WebSocket 服務(wù)器除了提供 WebSocket 功能之外,實(shí)際上也可以處理 HTTP 長連接。只需要增加?onRequest?事件監(jiān)聽即可實(shí)現(xiàn) Comet 方案 HTTP 長輪詢。



消息事例:

服務(wù)器端代碼

$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

$ws->on('open', function ($ws, $request) {

? ? var_dump($request->fd, $request->server);

? ? $ws->push($request->fd, "hello, welcome\n");

});

$ws->on('message', function ($ws, $frame) {

? ? echo "Message: {$frame->data}\n";

? ? $ws->push($frame->fd, "server: {$frame->data}");

});

$ws->on('close', function ($ws, $fd) {

? ? echo "client-{$fd} is closed\n";

});

$ws->start();

? ? 客戶端代碼

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script ></script>

<script type="text/javascript" charset="utf-8" src="/swoole-study/jquery.min.js"></script>

</head>

<body>

<input type="text" style="" id="button">

<input type="submit" value="測試內(nèi)容" onclick="sub_websocket()">

<div id="content"></div>

<script type="text/javascript" >

var wsServer ='ws://192.168.138.128:9502';

var websocket =new WebSocket(wsServer);

websocket.onopen =function (evt) {

console.log("Connected to WebSocket server.");

};

websocket.onmessage =function (evt) {

console.log('Retrieved data from server: ' + evt.data);

$('#content').append(evt.data)

};

function sub_websocket(){

cont =$('#button').val()

console.log(cont);

websocket.send(cont)

}

</script>

</body>

</html>


前端效果顯示:


服務(wù)器效果顯示



網(wǎng)絡(luò)協(xié)議

分層結(jié)構(gòu):?應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層,物理層

物理層:把比特位轉(zhuǎn)換為電信號(hào),為鏈路層提供數(shù)據(jù)傳輸功能

鏈路層:請求頭中添加mac地址和數(shù)據(jù)包

網(wǎng)絡(luò)層:請求層中補(bǔ)充mac地址?IP地址?和數(shù)據(jù)包

傳輸層:使用端口號(hào)將網(wǎng)絡(luò)層主機(jī)對(duì)主機(jī)的通信轉(zhuǎn)換成進(jìn)程對(duì)進(jìn)程的通信,在header中補(bǔ)充端口號(hào)和協(xié)議標(biāo)示?例如?tcp/ip?協(xié)議 80端口

應(yīng)用層:封裝或者解析具體的應(yīng)用數(shù)據(jù),




swoole結(jié)構(gòu)

master:主進(jìn)程;處理swoole的核心事件驅(qū)動(dòng)

manager:管理進(jìn)程?管理worker?task進(jìn)程的創(chuàng)建回收操作、

worker :工作進(jìn)程?用戶處理客戶端的請求

task: 異步任務(wù)工作進(jìn)程?swoole提供的異步工作進(jìn)程



? ??????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容