2012-01-29 3 views
0

저는 Node.js를 처음 접했으니 제발 참아주십시오.Node.js - 콜백 외부의 콜백?

나는 프록시 서버를 가지고 있으며 HTTP 본문 패킷을 가로 채고 싶습니다. 이러한 패킷은 zeromq를 통해 Node.js (C 프로그램) 외부의 다른 프로세스로 보내지고 응답 (수정 된 패킷)은 프록시의 응답으로 다시 써 져야합니다. 나는 이해하고 있기를 바란다.

누군가가 도움이 될 수 있습니다 희망
var http = require('http'); 
var util=require('util'); 
var net=require('net'); 
var context = require('zmq'); 

// socket to talk to server 
util.puts("Connecting to server..."); 
var requester=context.createSocket('req'); 

requester.on("message",function(reply) { 
     util.puts("Received reply"+reply.toString()); 

     //response.write(reply,'binary'); //how do I pick up the `response` variable inside the proxy callback and write with it?! 
}) 

requester.connect("ipc://myfd.ipc") 

process.on('SIGINT', function() { 
     requester.close() 
}) 




http.createServer(function(request, response) { 
     var proxy=http.createClient(80,request.headers['host']); 
     var proxy_request=proxy.request(request.method,request.url,request.headers); 

     proxy_request.addListener('response',function (proxy_response){ 
       proxy_response.addListener('data',function(chunk){ 
         //util.puts(chunk); 

         requester.send(chunk); //ok, my C program can read chunks 

         response.write(chunk,'binary'); //I don't want to do this - I want to write the response of `requester.send(chunk)` 
       }); 
       proxy_response.addListener('end',function(){ 
         //util.puts("end"); 
         response.end(); 
       }); 
       response.writeHead(proxy_response.statusCode,proxy_response.headers); 
     }); 


     request.addListener('close',function(){ 
       //util.puts("close"); 
     }); 
     request.addListener('data',function(chunk){ 
       //util.puts("data"); 
       proxy_request.write(chunk,'binary'); 
     }); 
     request.addListener('end',function(){ 
       //util.puts("end"); 
       proxy_request.end(); 
     }); 
}).listen(8080); 

...

+0

는'request.send()'을 허용하지 않습니다? 그렇다면 그렇게하는 것이 좋습니다. – Pointy

+0

흠. 무슨 뜻인지 모르겠다. 나는 문서를 찾아 그것이 있는지 알아봐야 할 것이다. – Eamorr

+0

requester.send (chunk, x)에 대한 두 번째 매개 변수 x가 정수 (플래그) 여야합니다. – Eamorr

답변

1

뾰족한을 벌써 같은 : 여기

내 자바 스크립트 코드로

나는 내가 붙어 비트와 코드를 댓글을 달았습니다 (당신이 무엇을했는지 본다.)), 콜백을 추가하여 requester.send(chunk);을 비동기로 만들어야한다. 콜백은 C 프로그램이하는 일을 마치 자마자 호출된다. 값을 직접 반환하여 비동기 (-> 동기식) 할 수도 있습니다.

"바인딩이있는 자체 node.js 모듈을 만드는 방법"에 대한 자습서를 살펴 보겠습니다. 콜백 매개 변수를 전달하는

  1. Good Overview
  2. Simple Async Module by Isaac Schleuters himself
+0

안녕하세요, 메시지 주셔서 감사합니다. 내 C 프로그램이 끝나지 않았다. 프록시를 통해 진행되는 것을 지속적으로 모니터링해야한다. 이 방법 대신 Node.js 모듈을 작성해야한다고 생각합니다 ( – Eamorr

+0

) C 프로그램에서 "데이터"이벤트를 트리거하려고하므로 eventEmitter 아이디어를 보여주는 예제를 보았습니다. 노드로 – japrescott