方法:
$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = '';while(!feof($fp)) { $result.= fgets($fp,1024);}print_r($result);
curl呢?
慢是因为网络连接,除非改变硬件环境,怎么改代码都无济于事
慢是因为网络连接,除非改变硬件环境,怎么改代码都无济于事
我看了一下资料,不太懂fread,fgets它们的原理。
fread一次性读取所有数据非常快,只是取不到完整的数据,只能取一千多字节。
while fgets每次取1024的话,就能全部取到。可就非常慢了。
是不是每次fgets都是要重新去链接一次,所以循环如果有十几次每次时间叠加就会慢下来?
fgets, fread都是不直接参与连接的。数据包到达后会存放在缓冲区,他们读的是本机的缓冲区,所以不会影响速度。
fread 读取指定大小的数据块,直到文件结束。如果无法判定文件结束,则会出现等待而导致失败。
fgets 读取指定大小的数据块,会在遇到换行符是停止读取,直到文件结束
获取远程数据,一般用 file_get_contents 就可以了
如果你整个文件不大于8k的,不如把1024去掉试试看
找到原因了。
服务器上面MTU包做了限制。
http://blog.csdn.net/jjjfew/article/details/6413460