Javascript Node.js-回调外部的回调?

Javascript Node.js-回调外部的回调?,javascript,events,node.js,callback,zeromq,Javascript,Events,Node.js,Callback,Zeromq,我是Node.js的新手,所以请耐心听我说 基本上,我有一个代理服务器,我想截获HTTP正文数据包。这些数据包通过zeromq发送到Node.js(一个C程序)之外的另一个进程,并且响应(修改后的数据包)必须作为来自代理的响应写回。我希望我说的有道理 我已经用我一直在使用的代码位对代码进行了注释 以下是我的javascript代码: var http = require('http'); var util=require('util'); var net=require('net'); var

我是Node.js的新手,所以请耐心听我说

基本上,我有一个代理服务器,我想截获HTTP正文数据包。这些数据包通过zeromq发送到Node.js(一个C程序)之外的另一个进程,并且响应(修改后的数据包)必须作为来自代理的响应写回。我希望我说的有道理

我已经用我一直在使用的代码位对代码进行了注释

以下是我的javascript代码:

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);

我希望有人能帮助…

正如Pointy alread所指出的(我知道你在那里做了什么;),你需要让
请求者发送(chunk)异步,当您的C程序完成它所做的事情时,就会调用回调。您还可以通过直接返回值来实现非异步(->同步)

我会深入阅读一些关于“如何使用绑定创建自己的node.js模块”的教程


  • request.send()
    不允许传递回调参数吗?如果是这样的话,你会这么做的。我不知道你的意思。我需要找到文档,看看是否有。对于请求者来说,第二个参数x似乎是。send(chunk,x)必须是整数(flag)。啊,好的。我不是节点专家;这就是为什么我没有冒险回答。然而,我怀疑实际的答案会以某种方式涉及到一些异步回调设置。Node(通常)不会“等待”任何东西……嘿,谢谢你的消息。我的C程序没有完成——它必须不断地监视代理中正在发生的事情。我想我可能不得不写一个Node.js模块,而不是这样做;(我将看一些示例来演示eventEmitter的思想,因为您希望触发从C程序到节点的“数据”事件