4

フラットなデータファイルから読み取り、ストリーミングをシミュレートするプログラムを作成しようとしています。これにより、ストリーミングハードウェアに接続して起動しなくても、ストリーミングデータを読み取るプログラムをテストできます。

これを達成するためのより現実的な方法は何ですか?シミュレートするハードウェアに応じて、さまざまな速度でストリーミングする必要があります。

これまでの私の2つのアイデアは、名前付きパイプに書き込むプログラムと、必要な速度で仮想シリアルポートに書き込むプログラムです。

ストリーミングデータをシミュレートするためのより良い(より現実的な)方法はありますか?

4

3 に答える 3

4

必要な速度でファイルをソケットに書き込むバックグラウンドプロセスを設定します。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;
}
于 2012-05-08T19:50:35.077 に答える
2

ストリームデータの元のソースに最も近い方法でストリームをシミュレートします。たとえば、通常はネットワークソケットからストリームを取得する場合は、ネットワークソケットを使用してシミュレーションします。シリアルポートがある場合は、仮想シリアルポートなどを使用します。それ以外の場合は、ストリームコンシューマコード用のアダプタが必要になります(ただし、これはすべてわかっていると思います)。

それ以外に、送信するデータの量を制御できるレート制限アルゴリズムが必要になります。すばやく検索するとこれにたどり着きましたが、確かにもっと複雑で洗練されたアルゴリズムがあります。YMMV。

もちろん、これは、ストリームのコンシューマーに対して有効なデータ/パケットを作成する方法を知っていることを前提としています。

于 2012-05-08T19:40:35.143 に答える
0

トリクル(ユーザースペース帯域幅シェーパー)を調べて、コーディング時間を節約してみてください。

于 2012-05-09T12:15:36.490 に答える