2012-05-08 5 views
3

Я пытаюсь написать программу, которая будет считываться из плоского файла данных и имитировать потоковое воспроизведение, чтобы я мог протестировать программу, которая считывает потоковые данные без необходимости подключения и запуска потокового оборудования.Имитация потоковых данных

Каковы наиболее реалистичные способы достижения этого? Мне нужно, чтобы он транслировался с переменной скоростью в зависимости от имитационного оборудования.

Мои две идеи до сих пор представляют собой программу, которая записывает в именованный канал или программу, которая записывает в виртуальный последовательный порт по тем тарифам, которые мне нужны.

Есть ли лучший (более реалистичный) способ моделирования потоковых данных?

ответ

3

Настройте фоновый процесс, который записывает файл в сокет любой ценой. В 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; 
} 
+0

Это выглядит отлично. Легко ли читать из гнезда $ A из другого процесса? – Nate

1

Я бы пошел с симуляцией потока таким образом, который ближе всего к исходному источнику данных потока. Например. если вы обычно получаете свой поток из сетевого сокета, затем используйте сетевой сокет для имитации; если у вас есть последовательный порт, затем используйте виртуальный последовательный порт и т. д. В противном случае вам понадобится адаптер для вашего потребительского кода потока (но вы уже знаете все это, я полагаю).

Кроме этого вам потребуется алгоритм ограничения скорости, который позволит вам контролировать, сколько данных отправлять. Быстрый поиск привел меня к this, но есть, безусловно, более сложные и сложные алгоритмы. YMMV.

Это предполагает, что вы знаете, как создавать достоверные данные/пакеты для потребителя вашего потока.

0

Вы можете попробовать экономить время кодирования, глядя на trickle (а в пользовательском пространстве формирователем полосы пропускания).

Смежные вопросы