首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP测量网络带宽

用PHP测量网络带宽
EN

Stack Overflow用户
提问于 2015-07-29 06:19:46
回答 2查看 2K关注 0票数 11

我正在将大型文件(1gb+)从Dropbox传输到YouTube,并希望通知用户事务可能需要多长时间。有没有任何方法来测量PHP中的网络流量?

我确实找到了linux (如何测量网络性能(如何测试网络协议))的解决方案,但没有为PHP找到解决方案。

除了通知用户,我想检查保证带宽(100 mbit/s),因为我遇到了几次网络问题(带宽太低)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-03 20:33:48

我真的不知道你是想做一个估计,还是给用户一个“实时”反馈。

如果您正在进行估计,我认为您可以选择OS路由并执行一个"exec“(如@kost建议的),它将告诉您当前负载。不用想太多了!

那么,让我们转到实时解决方案 :)!

首先查看ReactPHP (http://reactphp.org/),然后查看ReactPHP (https://github.com/reactphp/stream)的流实现。

这样做的目的是创建一个可读的流,在该流中您将从源读取大块数据(DropBox?)正如您所做的那样,您将继续计算剩余时间,并将其写入和可写流(例如,Web套接字)。

下面是从一个大的本地文件中读取、计算%并写入stdoud的一个小示例:

代码语言:javascript
复制
<?php
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$read = new \React\Stream\Stream(fopen('hugefile.txt', 'r+'), $loop);
$fileStats = fstat($read->stream);
$totalSize = $fileStats['size'];
$chunkSize = $totalSize/100;
$currChunk = 1;
$write = new \React\Stream\Stream(fopen('php://stdout', 'w+'), $loop);
$totalReadBytes = 0;
$read->on('data', function ($data, $read) use ($write, &$totalReadBytes, $totalSize, &$currChunk, $chunkSize) {
  $totalReadBytes += strlen($data);
  if($totalReadBytes > ($chunkSize * $currChunk)){
    $currChunk = ceil(($totalReadBytes/$totalSize)*100);
    $write->write(sprintf('%010d',$totalReadBytes).'/'.sprintf('%010d',$totalSize).' - '.$currChunk.'%'.PHP_EOL);
  }
});
$loop->run();

请注意,您所需要做的就是更改可读流的输入和写流的输出。

此外,您还可以将可读的流输送到一个文件(稍后将其上传到youtube),或者更好的是,如果youtube允许的话,只需将其输送到youtube (这将是非常棒的:D)。

编辑,为可见性添加一些注释:

由于ReactPHP基本上是NodeJS的一个无耻的副本,所以我发布的代码和想法的概念可以很容易地在NodeJS中实现(代码看起来应该很像)。我并不是说ReactPHP更糟或更好:)我只是认为您可以通过Node实现相同的结果,而且他们的文档要好得多,使用ReactPHP,您会发现自己在代码中挖掘出了一些东西。 我认为ReactPHP的核心是足够稳定的,但我理解您的担忧。尽管如此,如果我在你的地方,我肯定会尝试使用NodeJS。如果您了解JS的基本知识,那么它实际上应该与使用ReactPHP的学习曲线相同(如果不是更少的话,因为Node的资源要比ReactPHP多)。

票数 7
EN

Stack Overflow用户

发布于 2015-07-29 06:25:07

创建一个linux脚本,并使用exec系统函数从PHP运行它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31692618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档