我应该怎么做CONNECT活动?

时间:2013-08-20 16:34:27

标签: node.js sockets https proxy

如果我在Node.JS中创建一个简单的服务器

var httpServer = http.createServer(callback);

httpServer.on('connect', function(req, socket, head){
    console.log('connect');
});

httpServer.listen(3128, '192.168.0.2');

收到connect活动后我该怎么办?

背景

  • 这将是一个代理服务器,提供HTTP和HTTPS
  • 客户端在端口3128上连接
  • 当客户端发出HTTPS请求时,会触发connect事件

理想情况下,我想要做的是,将请求代理到终端服务器,然后给客户端回复。

但我在这里看不到任何API。 connect回调没有(request, response)的通常参数,而是接受(request, socket, head)

如何完成请求并发出回复?

1 个答案:

答案 0 :(得分:4)

从头开始重写

这是一个简单的例子 connect事件处理程序已经传递了socket对象,我们必须将其与远程连接的套接字联系起来。

httpServer.on('connect', function(req, socket, head) {
  var addr = req.url.split(':');
  //creating TCP connection to remote server
  var conn = net.connect(addr[1] || 443, addr[0], function() {
    // tell the client that the connection is established
    socket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', function() {
      // creating pipes in both ends
      conn.pipe(socket);
      socket.pipe(conn);
    });
  });

  conn.on('error', function(e) {
    console.log("Server connection error: " + e);
    socket.end();
  });
});