@walkor大人,
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
这段代码中的STREAM_CLIENT_PERSISTENT标志代表什么含义, 是持久连接的意思吗?
求举例,求解答。
STREAM_CLIENT_PERSISTENT 就是创建一个持久连接, 如果下次创建的连接和当前ip端口一致,那么就不会创建新的连接,而是复用这个链接。
这个通常用于php-fpm中与某个服务端建立长链接,建立的链接不会因为请求结束而销毁,能避免每次建立链接三次握手和关闭链接四次挥手,能一定程度上降低双方服务器开销。
例子php手册有,和不用STREAM_CLIENT_PERSISTENT的使用方法一模一样。
@walkor , 我测试了下,应该是当前php-fpm请求利用
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT); 来连接服务端, 如果这次请求中有多次利用STREAM_CLIENT_PERSISTENT来连接同一个IP跟PORT就会复用这个链接, 但是php-fpm请求结束后,再次运行 还是会有建立链接的过程的。
web_server服务端:
$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); //会打印一次connect。
脚本结束后再次运行这个脚本,还是会打印connect的。
脚本测试后,STREAM_CLIENT_PERSISTENT 这个参数,是针对当前php-fpm请求的链接复用。
@walkor ,我说的对吗?
把php-fpm进程数设置为1试下
我是通过php cli 来执行的。
好吧,你牛,用php cli测试来猜测php-fpm的行为
用 php-fpm测试了下,果然是持久链接,应该是php-fpm进程保存了持久链接的信息。@1 ,灰常感谢。
STREAM_CLIENT_PERSISTENT 就是创建一个持久连接,
如果下次创建的连接和当前ip端口一致,那么就不会创建新的连接,而是复用这个链接。
这个通常用于php-fpm中与某个服务端建立长链接,建立的链接不会因为请求结束而销毁,能避免每次建立链接三次握手和关闭链接四次挥手,能一定程度上降低双方服务器开销。
例子php手册有,和不用STREAM_CLIENT_PERSISTENT的使用方法一模一样。
@walkor , 我测试了下,应该是当前php-fpm请求利用
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
来连接服务端, 如果这次请求中有多次利用STREAM_CLIENT_PERSISTENT来连接同一个IP跟PORT就会复用这个链接,
但是php-fpm请求结束后,再次运行 还是会有建立链接的过程的。
web_server服务端:
$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); //会打印一次connect。
脚本结束后再次运行这个脚本,还是会打印connect的。
脚本测试后,STREAM_CLIENT_PERSISTENT 这个参数,是针对当前php-fpm请求的链接复用。
@walkor ,我说的对吗?
把php-fpm进程数设置为1试下
我是通过php cli 来执行的。
好吧,你牛,用php cli测试来猜测php-fpm的行为
用 php-fpm测试了下,果然是持久链接,应该是php-fpm进程保存了持久链接的信息。@1 ,灰常感谢。