[PHP] socket客户端时的超时问题
发布时间:2021-05-21 06:53:54 所属栏目:大数据 来源: https://www.jb51.cc
导读:连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80",?$errno,$errstr,2);? ? 那个数字是连接超时,比如连接google,2秒就返回错误,这样就不会一直等在那了stream_set_timeout($sock,5);? 这个数字是读取数据的超时?stream_get_
连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80",?$errno,$errstr,2);? ? 那个数字是连接超时,比如连接google,2秒就返回错误,这样就不会一直等在那了 stream_set_timeout($sock,5);? 这个数字是读取数据的超时 ? stream_get_Meta_data 可以在socket中返回元数据 ? 比如下面的测试,因为http协议连接完就会被服务端断掉,所以没办法使用长连接一直传输数据,需要在循环中不停的new对象创建连接for($i=0;$i<1000;$i++){ $sock=stream_socket_client("www.baidu.com:80",$errno,1)">$errstr,2); stream_set_timeout($sock,5); $Meta=stream_get_Meta_data($sock); var_dump("start",1)">$Meta); fwrite(); $buf = ''; while (true) { $s = fread(); if (!isset($s[0])) { break; } $buf .= $s; } var_dump("end",1)">$Meta,1)">); } string(5) "start" array(7) { ["stream_type"]=> string(14) "tcp_socket/ssl" ["mode"]=> string(2) "r+" ["unread_bytes"]=> int(0) ["seekable"]=> bool(false) ["timed_out"]=>) ["blocked"]=>) ["eof"]=>) } string(3) "end" resource(175) of type (stream) 其中的timed_out就是读取数据的超时,false为读取没超时 eof为是否已经到了文件尾,如果是长连接这里是不会到达文件尾的,http协议这种短连接会读完后连接就结束了 ?(编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |