一次性向客戶端發送一個大的數據包的時候 |
客戶端: $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 |
swoole( 網絡IO 三)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.