模拟流数据
我正在尝试编写一个程序,它将从平面数据文件中读取并模拟流式传输,这样我就可以测试一个读取流数据的程序,而无需连接和启动流式硬件。
有哪些更现实的方法可以实现这一目标? 我需要它以可变速度流,这取决于我模拟的硬件。
到目前为止,我的两个想法是写入命名管道的程序,或者以我需要的速率写入虚拟串行端口的程序。
是否有更好(更现实)的模拟流数据的方式?
设置后台进程,以任何所需的速率将文件写入套接字。 在Perl,
use Socket; socketpair my $A, my $B, AF_UNIX, SOCK_STREAM, PF_UNSPEC; if (fork() == 0) { stream(); exit; } while (<$A>) { print; } sub stream { # output 1024 bytes/sec select $B; $| = 1; # disable output buffering open my $fh, '<', '/file/to/stream'; my $buffer; while (my $n = read $fh, $buffer, 1024) { sleep 1; print $B $buffer; } close $fh; }
我将以最接近原始流数据源的方式模拟流。 例如,如果您通常从网络套接字获取流,则使用网络套接字进行模拟; 如果您有一个串口,那么使用虚拟串口等。否则,您将需要一个适配器用于您的流消费者代码(但您已经知道我认为的所有这些)。
除此之外,您还需要一个速率限制算法,该算法允许您控制要发送的数据量。 快速搜索让我想到了这一点,但肯定有更复杂和复杂的算法。 因人而异。
当然,这假定您知道如何为流的使用者创建有效的数据/数据包。
您可以尝试通过查看trickle (用户空间带宽整形器)来节省一些编码时间。