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);
}
}
}
}
我正在尝试在 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);
}
}
}
}