@walkor大人,
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
這段代碼中的STREAM_CLIENT_PERSISTENT標(biāo)志代表什么含義, 是持久連接的意思嗎?
求舉例,求解答。
STREAM_CLIENT_PERSISTENT 就是創(chuàng)建一個(gè)持久連接,
如果下次創(chuàng)建的連接和當(dāng)前ip端口一致,那么就不會(huì)創(chuàng)建新的連接,而是復(fù)用這個(gè)鏈接。
這個(gè)通常用于php-fpm中與某個(gè)服務(wù)端建立長鏈接,建立的鏈接不會(huì)因?yàn)檎?qǐng)求結(jié)束而銷毀,能避免每次建立鏈接三次握手和關(guān)閉鏈接四次揮手,能一定程度上降低雙方服務(wù)器開銷。
例子php手冊(cè)有,和不用STREAM_CLIENT_PERSISTENT的使用方法一模一樣。
@walkor , 我測試了下,應(yīng)該是當(dāng)前php-fpm請(qǐng)求利用
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
來連接服務(wù)端, 如果這次請(qǐng)求中有多次利用STREAM_CLIENT_PERSISTENT來連接同一個(gè)IP跟PORT就會(huì)復(fù)用這個(gè)鏈接,
但是php-fpm請(qǐng)求結(jié)束后,再次運(yùn)行 還是會(huì)有建立鏈接的過程的。
web_server服務(wù)端:
$web->onConnect = function() {
echo "connect\n";
};
測試腳本:
$client = stream_socket_client('tcp://127.0.0.1:55151', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
$client1 = stream_socket_client('tcp://127.0.0.1:55151', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
$client2 = stream_socket_client('tcp://127.0.0.1:55151', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
var_dump($client, $client1, $client2); //會(huì)打印一次connect。
腳本結(jié)束后再次運(yùn)行這個(gè)腳本,還是會(huì)打印connect的。
腳本測試后,STREAM_CLIENT_PERSISTENT 這個(gè)參數(shù),是針對(duì)當(dāng)前php-fpm請(qǐng)求的鏈接復(fù)用。
@walkor ,我說的對(duì)嗎?