Skip to content

Commit b4f001d

Browse files
committed
added waitall example.
1 parent 2d02ca2 commit b4f001d

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

examples/recv_file.php

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
$server_ip = $argv[1];
99
}
1010
$cli = new swoole_client(SWOOLE_TCP);
11+
$start_ms = microtime(true);
1112
$cli->connect($server_ip, 9501, 5);
1213
$filesize = intval($cli->recv());
1314
if ($filesize == 0)
@@ -17,15 +18,28 @@
1718
echo "file_size = $filesize\n";
1819
$content = '';
1920
$cli->send("get file");
20-
while(1)
21+
22+
$use_waitall = false;
23+
24+
if ($use_waitall)
2125
{
22-
$content .= $cli->recv();
23-
echo strlen($content)."\n";
24-
if(strlen($content) == $filesize)
26+
//waitall,需要一次性分配内存,适合小一点的文件
27+
$content = $cli->recv($filesize, true);
28+
}
29+
else
30+
{
31+
//循环接收,适合大型文件
32+
while(1)
2533
{
26-
$i = time();
27-
file_put_contents(__DIR__."/recv_file_{$i}.jpg", $content);
28-
break;
34+
//超大文件接收,这里需要改成分段写磁盘
35+
$content .= $cli->recv();
36+
if (strlen($content) == $filesize)
37+
{
38+
break;
39+
}
2940
}
3041
}
42+
file_put_contents(__DIR__."/recv_file_".time().".jpg", $content);
43+
echo "recv ".strlen($content)." byte data\n";
44+
echo "used ".((microtime(true) - $start_ms)*1000)."ms\n";
3145
$cli->close();

0 commit comments

Comments
 (0)