Node JS TCP 代理:在回调函数中重用套接字

Node JS TCP Proxy: Reuse socket in callback function

我正在尝试在 Node JS 中实现 TCP 代理。我对 Javascript 只有一些经验,所以一路上遇到了很多问题。我已经为这个做了很多搜索,但没有运气。

当浏览器发送 HTTPS 连接请求时出现问题。我的代理将解析主机名和端口,然后创建一个连接到服务器的新套接字。如果一切顺利,我将开始转发消息。

我的部分代码如下所示:

var net = require('net');

var server = net.createServer(function(clientSock) {

    clientSock.on('data', function(clientData) {

         var host = // get from data
         var port = // get from data

         if (data is a CONNECT request) {

              // Create a new socket to server
              var serverSock = new net.Socket();

              serverSock.connect(port, host, function() {
                  serverSock.write(clientData);

                  clientSock.write('HTTP/1.1 200 OK\r\n');
              }

              serverSock.on('data', function(serverData) {
                  clientSock.write(serverData);
              }
         }
    }        
}

由于 CONNECT 请求需要客户端套接字和服务器套接字都打开,直到一方关闭连接,上面的代码没有这种行为。每次我从客户端接收到一些数据时,我都会创建一个新的套接字到服务器并且关闭旧的。

有没有办法将服务器套接字存储为全局变量,以便数据事件处理程序可以重用它?或者还有其他方法可以解决吗?

非常感谢!!!

您可以将变量向上移动到更高的范围,以便它在多个事件中仍然存在,然后您可以测试它的值是否已经存在:

var net = require('net');

var server = net.createServer(function(clientSock) {

    var serverSock;
    clientSock.on('data', function(clientData) {

         var host = // get from data
         var port = // get from data

         if (data is a CONNECT request) {

              // Create a new socket to server
              if (!serverSock) {
                  serverSock = new net.Socket();

                  serverSock.connect(port, host, function() {
                      serverSock.write(clientData);

                      clientSock.write('HTTP/1.1 200 OK\r\n');
                  }

                  serverSock.on('data', function(serverData) {
                      clientSock.write(serverData);
                  }
              } else {
                  serverSock.write(clientData);
              }
         }
    }        
}