【发布时间】:2015-07-20 17:53:16
【问题描述】:
我正在尝试在 Node JS 中实现 TCP 代理。我只对 Javascript 有一些经验,所以在此过程中遇到了很多问题。我已经做了很多搜索,但没有运气。
当浏览器发送 HTTPS 的 CONNECT 请求时会出现此问题。我的代理将解析主机名和端口,然后创建一个连接到服务器的新套接字。如果所有这些步骤都顺利,我将开始转发消息。
我的部分代码如下所示:
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 请求需要客户端套接字和服务器套接字都打开,直到一侧关闭连接,所以上面的代码没有这种行为。每次我从客户端收到一些数据时,我都会为服务器创建一个新的套接字,而旧的套接字将被关闭。
有没有办法将服务器套接字存储为全局变量,以便数据事件处理程序可以重用它?或者有没有其他方法可以解决这个问题?
非常感谢!!!!
【问题讨论】:
标签: node.js networking tcp proxy event-handling