Swoole Client實例

2022-07-12 11:24 更新

Swoole Client介紹

swoole_client提供了tcp/udp socket的客戶端的封裝代碼,使用時僅需 new swoole_client即可。 swoole的socket client對比PHP提供的stream族函數(shù)有哪些好處:

  • stream函數(shù)存在超時設(shè)置的陷阱和Bug,一旦沒處理好會導(dǎo)致Server端長時間阻塞
  • fread有8192長度限制,無法支持UDP的大包
  • swoole_client支持waitall,在知道包長度的情況下可以一次取完,不必循環(huán)取。
  • swoole_client支持UDP connect,解決了UDP串包問題
  • swoole_client是純C的代碼,專門處理socket,stream函數(shù)非常復(fù)雜。swoole_client性能更好

除了普通的同步阻塞+select的使用方法外,swoole_client還支持異步非阻塞回調(diào)。

同步阻塞客戶端

$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, -1))
{
    exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();

php-fpm/apache環(huán)境下只能使用同步客戶端
apache環(huán)境下僅支持prefork多進(jìn)程模式,不支持prework多線程

異步非阻塞客戶端

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function(swoole_client $cli) {
    $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on("receive", function(swoole_client $cli, $data){
    echo "Receive: $data";
    $cli->send(str_repeat('A', 100)."\n");
    sleep(1);
});
$client->on("error", function(swoole_client $cli){
    echo "error\n";
});
$client->on("close", function(swoole_client $cli){
    echo "Connection close\n";
});
$client->connect('127.0.0.1', 9501);

異步客戶端只能使用在cli命令行環(huán)境

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號