2014-10-04 3 views
0

'\ r \ n'에 파일을 분할하고 각 행을 app.js 리스너로 내보내는 모듈을 만들었습니다. 다음은 모듈의 스냅 코드입니다.Nodejs createReadStream True Async

var fs = require('fs'); 
var util = require('util'); 
var EventEmitter = require('events').EventEmitter; 

var data_array = []; 


function STF(fname){ 

    if (!(this instanceof STF)) { 
    return new STF(fname); 
    } 
    this.fname = fname; 
    var counts=0; 
    this.counts = counts; 
} 

util.inherits(STF, EventEmitter); 

STF.prototype.readLines=function readLines(){ 
    var self = this; 
    var time = process.hrtime(); 
    var input = fs.createReadStream(this.fname); 

    var remaining = ''; 
    input.on('data', function(data) { 

    remaining += data; 
    var index = remaining.indexOf('\r\n'); 
    while (index > -1) { 
     self.counts++; 
     var line = remaining.substring(0, index); 
     remaining = remaining.substring(index + 1); 
     data_array.push(line); 
     index = remaining.indexOf('\r\n'); 
     //console.log(line); 
     self.emit('line',line,process.hrtime(time),self.counts); 
    } 
    }); 

    input.on('end', function() { 
    if (remaining.length > 0) { 
     console.log('Leftover: '+remaining); 
     data_array.push(remaining); 
    } 
    self.emit('array',data_array,process.hrtime(time)); 


    }); 

    input.on('error',function(err){ 
    self.emit('error',err); 
    }); 

} 

module.exports = STF; 

내 응용 프로그램은 다른 파일로로드 된 모듈의 2 인스턴스를 새로 만들고 각 인스턴스에 리스너를 추가합니다. 내 코드의

var STF = require('./stf.js'); 
    var test = new STF('A1B.file'); 
    var test2 = new STF('A1TI.file'); 

    test.on('array',function(data,time,count){ 
    //console.log(data); 
    }); 

    test.on('line',function(data,time,count){ 
    //console.log(data); 
    console.log('A1B:::::::::::::::::::::::: '+time,count); 
    }); 

    test2.on('array',function(data,time,count){ 
    //console.log(data); 
    }); 

    test2.on('line',function(data,time,count){ 
    //console.log(data); 
    console.log('A1TI:: '+time,count); 
    }); 
    test2.readLines(); 
    test.readLines(); 

부분 결과는 다음과 같습니다 : 결과가 없습니다 내가 기대 한 것입니다

A1TI:: 0,425262376 490 
    A1TI:: 0,425756742 491 
    A1TI:: 0,426177125 492 
    A1TI:: 0,426620173 493 
    A1TI:: 0,427051246 494 
    A1B:::::::::::::::::::::::: 0,426992657 372 
    A1B:::::::::::::::::::::::: 0,427497715 373 
    A1B:::::::::::::::::::::::: 0,427928361 374 
    A1B:::::::::::::::::::::::: 0,428358152 375 
    A1B:::::::::::::::::::::::: 0,428786232 376 
    A1B:::::::::::::::::::::::: 0,429217306 377 
    A1B:::::::::::::::::::::::: 0,429645386 378 
    A1B:::::::::::::::::::::::: 0,430100408 379 
    A1B:::::::::::::::::::::::: 0,430565267 380 
    A1B:::::::::::::::::::::::: 0,431001472 381 
    A1B:::::::::::::::::::::::: 0,431477449 382 
    A1B:::::::::::::::::::::::: 0,431902964 383 
    A1B:::::::::::::::::::::::: 0,432334037 384 
    A1B:::::::::::::::::::::::: 0,432809159 385 
    A1B:::::::::::::::::::::::: 0,433348429 386 
    A1B:::::::::::::::::::::::: 0,433819702 387 
    A1B:::::::::::::::::::::::: 0,434271303 388 
    A1B:::::::::::::::::::::::: 0,434702805 389 
    A1B:::::::::::::::::::::::: 0,435139010 390 
    A1B:::::::::::::::::::::::: 0,435578637 391 
    A1B:::::::::::::::::::::::: 0,436037508 392 
    A1B:::::::::::::::::::::::: 0,436451904 393 
    A1B:::::::::::::::::::::::: 0,436868437 394 
    A1B:::::::::::::::::::::::: 0,437438070 395 
    A1B:::::::::::::::::::::::: 0,437864868 396 
    A1B:::::::::::::::::::::::: 0,438327160 397 
    A1B:::::::::::::::::::::::: 0,438799716 398 
    A1B:::::::::::::::::::::::: 0,439244902 399 
    A1B:::::::::::::::::::::::: 0,439669989 400 
    A1B:::::::::::::::::::::::: 0,440128005 401 
    A1B:::::::::::::::::::::::: 0,440544966 402 
    A1B:::::::::::::::::::::::: 0,441036339 403 
    A1B:::::::::::::::::::::::: 0,441516165 404 
    A1B:::::::::::::::::::::::: 0,441976747 405 
    A1B:::::::::::::::::::::::: 0,442480521 406 
    A1B:::::::::::::::::::::::: 0,442927418 407 
    A1B:::::::::::::::::::::::: 0,443472675 408 
    A1B:::::::::::::::::::::::: 0,443924276 409 
    A1B:::::::::::::::::::::::: 0,444369035 410 
    A1B:::::::::::::::::::::::: 0,444814221 411 
    A1B:::::::::::::::::::::::: 0,445266677 412 
    A1B:::::::::::::::::::::::: 0,445685349 413 
    A1B:::::::::::::::::::::::: 0,446134812 414 
    A1B:::::::::::::::::::::::: 0,446554339 415 
    A1B:::::::::::::::::::::::: 0,447000381 416 
    A1B:::::::::::::::::::::::: 0,447436586 417 
    A1B:::::::::::::::::::::::: 0,447907859 418 
    A1B:::::::::::::::::::::::: 0,448356039 419 
    A1B:::::::::::::::::::::::: 0,448796521 420 
    A1B:::::::::::::::::::::::: 0,449245129 421 
    A1B:::::::::::::::::::::::: 0,449723244 422 
    A1B:::::::::::::::::::::::: 0,450223598 423 
    A1B:::::::::::::::::::::::: 0,450791520 424 
    A1B:::::::::::::::::::::::: 0,451458231 425 
    A1B:::::::::::::::::::::::: 0,451982105 426 
    A1B:::::::::::::::::::::::: 0,452548317 427 
    A1B:::::::::::::::::::::::: 0,453083310 428 
    A1B:::::::::::::::::::::::: 0,453572117 429 
    A1B:::::::::::::::::::::::: 0,454091287 430 
    A1B:::::::::::::::::::::::: 0,454527065 431 
    A1B:::::::::::::::::::::::: 0,455027846 432 
    A1B:::::::::::::::::::::::: 0,455476026 433 
    A1B:::::::::::::::::::::::: 0,455912232 434 
    A1B:::::::::::::::::::::::: 0,456366826 435 
    A1B:::::::::::::::::::::::: 0,456863759 436 
    A1B:::::::::::::::::::::::: 0,457317070 437 
    A1B:::::::::::::::::::::::: 0,457758835 438 
    A1B:::::::::::::::::::::::: 0,458191620 439 
    A1B:::::::::::::::::::::::: 0,458659899 440 
    A1B:::::::::::::::::::::::: 0,459090545 441 
    A1B:::::::::::::::::::::::: 0,459516060 442 
    A1B:::::::::::::::::::::::: 0,459953548 443 
    A1B:::::::::::::::::::::::: 0,460386760 444 
    A1B:::::::::::::::::::::::: 0,460824249 445 
    A1B:::::::::::::::::::::::: 0,461253184 446 
    A1B:::::::::::::::::::::::: 0,461676133 447 
    A1B:::::::::::::::::::::::: 0,462105496 448 
    A1B:::::::::::::::::::::::: 0,462534003 449 
    A1B:::::::::::::::::::::::: 0,462959945 450 
    A1B:::::::::::::::::::::::: 0,463426087 451 
    A1B:::::::::::::::::::::::: 0,463880681 452 
    A1B:::::::::::::::::::::::: 0,464371626 453 
    A1B:::::::::::::::::::::::: 0,464866848 454 
    A1B:::::::::::::::::::::::: 0,465302198 455 
    A1B:::::::::::::::::::::::: 0,465733700 456 
    A1B:::::::::::::::::::::::: 0,466184445 457 
    A1B:::::::::::::::::::::::: 0,466690786 458 
    A1B:::::::::::::::::::::::: 0,467174889 459 
    A1B:::::::::::::::::::::::: 0,467606818 460 
    A1B:::::::::::::::::::::::: 0,468117007 461 
    A1B:::::::::::::::::::::::: 0,468543377 462 
    A1B:::::::::::::::::::::::: 0,469048007 463 
    A1B:::::::::::::::::::::::: 0,469470955 464 
    A1B:::::::::::::::::::::::: 0,469884923 465 
    A1B:::::::::::::::::::::::: 0,470324550 466 
    A1B:::::::::::::::::::::::: 0,470746643 467 
    A1B:::::::::::::::::::::::: 0,471202093 468 
    A1B:::::::::::::::::::::::: 0,471628890 469 
    A1B:::::::::::::::::::::::: 0,472128816 470 
    A1B:::::::::::::::::::::::: 0,472595384 471 
    A1B:::::::::::::::::::::::: 0,473091461 472 
    A1B:::::::::::::::::::::::: 0,473549477 473 
    A1B:::::::::::::::::::::::: 0,473962162 474 
    A1B:::::::::::::::::::::::: 0,474409059 475 
    A1B:::::::::::::::::::::::: 0,474842271 476 
    A1B:::::::::::::::::::::::: 0,475334927 477 
    A1B:::::::::::::::::::::::: 0,475833997 478 
    A1B:::::::::::::::::::::::: 0,476282605 479 
    A1B:::::::::::::::::::::::: 0,476713678 480 
    A1B:::::::::::::::::::::::: 0,477156726 481 
    A1B:::::::::::::::::::::::: 0,477570266 482 
    A1B:::::::::::::::::::::::: 0,478079600 483 
    A1B:::::::::::::::::::::::: 0,478530346 484 
    A1B:::::::::::::::::::::::: 0,479006751 485 
    A1B:::::::::::::::::::::::: 0,479551153 486 
    A1B:::::::::::::::::::::::: 0,480061342 487 
    A1B:::::::::::::::::::::::: 0,480487284 488 
    A1B:::::::::::::::::::::::: 0,480899969 489 
    A1B:::::::::::::::::::::::: 0,481521348 490 
    A1B:::::::::::::::::::::::: 0,481973804 491 
    A1B:::::::::::::::::::::::: 0,482422412 492 
    A1B:::::::::::::::::::::::: 0,482835097 493 
    A1B:::::::::::::::::::::::: 0,483317489 494 
    A1TI:: 0,484679135 495 
    A1TI:: 0,485216266 496 
    A1TI:: 0,485742279 497 
    A1TI:: 0,486227237 498 
    A1TI:: 0,486674134 499 
    A1TI:: 0,487127445 500 
    A1TI:: 0,487537992 501 
    A1TI:: 0,487973770 502 
    A1TI:: 0,488392869 503 
    A1TI:: 0,488840194 504 
    A1TI:: 0,489251596 505 
    A1TI:: 0,489715599 506 
    A1TI:: 0,490158219 507 
    A1TI:: 0,490578174 508 
    A1TI:: 0,491020794 509 
    A1TI:: 0,491448019 510 
    A1TI:: 0,491941102 511 
    A1TI:: 0,492403822 512 
    A1TI:: 0,492867825 513 
    A1TI:: 0,493332684 514 
    A1TI:: 0,493759908 515 
    A1TI:: 0,494264538 516 
    A1TI:: 0,494692191 517 
    A1TI:: 0,495180570 518 
    A1TI:: 0,495587695 519 
    A1TI:: 0,496034165 520 
    A1TI:: 0,496475074 521 
    A1TI:: 0,496927103 522 
    A1TI:: 0,497385974 523 
    A1TI:: 0,497831588 524 
    A1TI:: 0,498271643 525 
    A1TI:: 0,498680906 526 
    A1TI:: 0,499120533 527 
    A1TI:: 0,499538349 528 
    A1TI:: 0,500105417 529 
    A1TI:: 0,500698998 530 
    A1TI:: 0,501199352 531 
    A1TI:: 0,501674474 532 
    A1TI:: 0,502114101 533 
    A1TI:: 0,502525075 534 
    A1TI:: 0,502962563 535 
    A1TI:: 0,503373537 536 
    A1TI:: 0,503828560 537 
    A1TI:: 0,504277167 538 
    A1TI:: 0,504695411 539 
    A1TI:: 0,505141025 540 
    A1TI:: 0,505550289 541 
    A1TI:: 0,506002745 542 
    A1TI:: 0,506443227 543 
    A1TI:: 0,506915355 544 
    A1TI:: 0,507373371 545 
    A1TI:: 0,507832670 546 
    A1TI:: 0,508292397 547 
    A1TI:: 0,508717483 548 
    A1TI:: 0,509237936 549 
    A1TI:: 0,509678846 550 
    A1TI:: 0,510116762 551 
    A1TI:: 0,510526453 552 
    A1TI:: 0,510970357 553 
    A1TI:: 0,511380903 554 
    A1TI:: 0,511937279 555 
    A1TI:: 0,512414967 556 
    A1TI:: 0,512872555 557 
    A1TI:: 0,513283957 558 
    A1TI:: 0,513691082 559 
    A1TI:: 0,514134130 560 
    A1TI:: 0,514545104 561 
    A1TI:: 0,514983876 562 
    A1TI:: 0,515452155 563 
    A1TI:: 0,515960634 564 
    A1TI:: 0,516437039 565 
    A1TI:: 0,516916865 566 
    A1TI:: 0,517391987 567 
    A1TI:: 0,517870103 568 
    A1TI:: 0,518336244 569 
    A1TI:: 0,518747646 570 
    A1TI:: 0,519193687 571 
    A1TI:: 0,519672658 572 
    A1TI:: 0,520116989 573 

;

내가 A1TI & A1B 선이 방출 A1TI 같은 순서로 각 줄 바꿈에 인쇄 할보고 기대했다 >> A1B >> A1TI >> A1B 등

내 코드의 결과는 (122)를 인쇄하는 것 같습니다 ~ A1B 라인 중 124 개 >> 122-124 A1T 라인 >> A1B 라인 중 122 ~ 124 개

이 마법 번호의 출처를 파악할 수 없습니다. 누군가 제발 나를 밝힐 수 있습니까? 당신이 정말로 다른 라인에 필요하면, 내가 생각

fs.createReadStream(this.fname,{'bufferSize': xxx}); 

그러나 귀하의 경우 :

덕분에 앞서

+0

아마도 기본 스트림이 읽는 버퍼 크기와 관련이있을 것입니다. 다른 비동기 읽기 (다른 스트림으로 변환)를하기 전에 모든 데이터를 전달하려고 시도하기 때문입니다. 기본 스트림 구현이나 브라우저 소스 코드로 들어가서 언제 어떻게'emit ("data")'를 결정하고 각 라인을 보낼지 결정할 수 있습니다. – jfriend00

답변

0

한 번에 읽을 데이터의 양을 제어하기 위해 버퍼 크기를 사용할 수 있습니다 아마도 양방향 통신 (자식 프로세스)을 사용하여 구조를 재고해야합니다. 그러면 앱이 다음 줄을받을 준비가되었을 때 test 및 test2에 알릴 수 있습니다.

관련 문제