天天看點

swoole同步、異步、心跳機制和粘包swoole同步、異步、心跳機制和粘包

swoole同步、異步、心跳機制和粘包

這是一篇學習swoole簡單入門的方法,能更容易、快速的掌握swoole的基本知識

1、swoole同步機制

swoole的同步與http的同步一樣,都會形成消息阻塞。需要等待服務端傳回消息才會繼續執行下一步操作:

$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SYNC);     //`第一個參數代表tcp協定,第二個參數就是同步阻塞`
$client->connect('192.168.1.63',9501);    //監聽伺服器位址和端口
$client->send(3);    //向伺服器發送了一個3
$recv = $client->recv(); 
echo $recv;    //輸出伺服器傳回的結果
$client->close();  
           

2、異步機制

swoole異步機制類似于php開發中的ajax請求,用戶端發送了請求,不用等服務端傳回資料就可以執行下一個操作,也稱異步非阻塞。swoole的異步必須注冊所有回調函數:

$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC); //第二個參數設定為異步
$client->on("connect", function(swoole_client $cli) {
    $cli->send("異步發送的資料\r\n\r\n");   //異步發送資料給服務端
});
$client->on("receive", function(swoole_client $cli, $data){
    echo "Receive: $data"; //接收服務端傳回資訊
});
$client->on("error", function(swoole_client $cli){
    echo "報錯了\n";     //錯誤回調
});
$client->on("close", function(swoole_client $cli){
    echo "關閉了\n";   //結束回調
});
$client->connect('192.168.1.63',9501);

echo "做其他異步操作"; //不會阻塞。還可以做其他操作
           

3、心跳機制

為了檢測用戶端是否還跟服務端保持連接配接的方式

$server->set(
    [
        'heartbeat_idle_time'=>10,    //連接配接最大的空閑時間,10秒沒有操作資料就判定為斷開
        'heartbeat_check_interval'=>3    //伺服器定時檢查,每隔3秒檢查一次服務是否連接配接
    ]
);
           

4、粘包

用戶端在向服務端發送資料的時候,會先發送到緩沖池,等待一定數量發送給服務端,比如:第一次發123,第二次也發123,服務端可能接收到的資料就是123123.這樣伺服器分不清接收到的消息就叫粘包