2012-05-08 4 views
3

스트리밍 하드웨어를 연결하고 시작하지 않고도 스트리밍 데이터를 읽는 프로그램을 테스트 할 수 있도록 데이터 플랫 파일에서 읽고 스트리밍을 시뮬레이트하는 프로그램을 작성하려고합니다.스트리밍 데이터 시뮬레이션

이 작업을 수행하는보다 현실적인 방법은 무엇입니까? 하드웨어 시뮬레이션에 따라 다양한 속도로 스트리밍해야합니다.

내 두 가지 아이디어는 명명 된 파이프 또는 필요한 속도로 가상 직렬 포트에 쓰는 프로그램에 쓰는 프로그램입니다.

스트리밍 데이터를 시뮬레이션하는 더 나은 (좀 더 현실적인) 방법이 있습니까?

답변

3

원하는 속도로 소켓에 파일을 쓰는 백그라운드 프로세스를 설정하십시오. 펄에서

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 (사용자 공간 대역폭 셰이퍼)를 보면 일부 코딩 시간을 절약하려고 할 수 있습니다.

관련 문제