swoole( 網絡IO 三)

一次性向客戶端發送一個大的數據包的時候

客戶端:

$client->send(str_repeat(‘xxx’,1024*1024*1));

服務端:

$serv->on(‘receive’,function($serv,$fd,$from_id,$data){

Echo ‘接收到’.$fd.’的信息’;

$serv->send($fd,”server:”.$data);

})

粘包解決

1)延遲發送不是最佳答案

2)分隔符

A)特殊字符

B)swoole的EOF方式處理(資源消耗)

 

C)因爲每次傳送到服務端的數據的長度是固定的,可以根據數據的長度做一個區分

(pack 數據長度)+ 實際的數據

比較大的包,連接的時候,有時會斷開

1)重連機制

2)數據校驗-確認機制

 

 

 

網絡IO模型

進程

好比系統中運行的程序 php index.php

 

父進程:管理

子進程:工作

 

代碼+數據+內核空間(類似於swoole官網)

 

線程

也會稱爲輕量級的進程,是程序執流中最小的單位

 

就是任務,例如一個項目中的商品詳情,購物車

 

一個進程可以有多個線程(進程消耗大,所以出現了線程)

 

每一個連接就是一個線程

 

多進程

 

協程

比線程小,一個線程可以有多個協程

圖解(進程,線程,協程)

進程(公司)  線程(上班正常的) 協程(上班過程中去個廁所也可以做事情)

 

 

 

初始化 -> 可運行 -> 運行中 -> 結束

 

1)涉及到鎖

2)涉及到線程阻塞和運行之間的切換

 

阻塞:同時點擊很多線程(任務) 會造成阻塞  不斷轉圈圈

 

協程 多個房間  VIP

發佈了57 篇原創文章 · 獲贊 1 · 訪問量 3742
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章