STREAM_CLIENT_PERSISTENT参数疑惑

@walkor大人,

$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);


这段代码中的STREAM_CLIENT_PERSISTENT标志代表什么含义, 是持久连接的意思吗?

求举例,求解答。
已邀请:

walkor

赞同来自:

STREAM_CLIENT_PERSISTENT 就是创建一个持久连接,
如果下次创建的连接和当前ip端口一致,那么就不会创建新的连接,而是复用这个链接。

这个通常用于php-fpm中与某个服务端建立长链接,建立的链接不会因为请求结束而销毁,能避免每次建立链接三次握手和关闭链接四次挥手,能一定程度上降低双方服务器开销。

例子php手册有,和不用STREAM_CLIENT_PERSISTENT的使用方法一模一样。

echo1

赞同来自:

@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 ,我说的对吗?

walkor

赞同来自:

把php-fpm进程数设置为1试下

要回复问题请先登录注册