Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该如何处理连接事件?_Node.js_Sockets_Https_Proxy - Fatal编程技术网

Node.js 我应该如何处理连接事件?

Node.js 我应该如何处理连接事件?,node.js,sockets,https,proxy,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服务

如果我在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
回调没有通常的
(请求、响应)
参数,而是接受
(请求、套接字、头)


我如何满足请求并发出响应?重新编写的答案

下面是一个简单的例子。
connect
事件处理程序已传递了
socket
对象,我们必须将该对象与远程连接的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();
  });
});

也许看看它是怎么做的?谢谢,但没有帮助。我说的是为httpS请求提供服务,并使用我看到的CONNECT方法处理请求。答案从头重写。感谢您花时间重写,这对我帮助很大:)我编辑了您的答案,它丢失了返回给客户的200 OK消息,但在其他方面仍然有效。谢谢。我在回答中包含了一个更正:
socket.write
是异步函数,我们必须在发送头后在
write
函数的回调中创建管道。