recv_file.php 966 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. if (empty($argv[1]))
  3. {
  4. $server_ip = '127.0.0.1';
  5. }
  6. else
  7. {
  8. $server_ip = $argv[1];
  9. }
  10. $cli = new swoole_client(SWOOLE_TCP);
  11. $start_ms = microtime(true);
  12. $cli->connect($server_ip, 9501, 5);
  13. $filesize = intval($cli->recv());
  14. if ($filesize == 0)
  15. {
  16. die("get file size failed.\n");
  17. }
  18. echo "file_size = $filesize\n";
  19. $content = '';
  20. $cli->send("get file");
  21. $use_waitall = false;
  22. if ($use_waitall)
  23. {
  24. //waitall,需要一次性分配内存,适合小一点的文件
  25. $content = $cli->recv($filesize, true);
  26. }
  27. else
  28. {
  29. //循环接收,适合大型文件
  30. while(1)
  31. {
  32. //超大文件接收,这里需要改成分段写磁盘
  33. $content .= $cli->recv();
  34. if (strlen($content) == $filesize)
  35. {
  36. break;
  37. }
  38. }
  39. }
  40. file_put_contents(__DIR__."/recv_file_".time().".jpg", $content);
  41. echo "recv ".strlen($content)." byte data\n";
  42. echo "used ".((microtime(true) - $start_ms)*1000)."ms\n";
  43. $cli->close();