我正在尝试构建将本地节点js应用程序连接到Heroku上已部署的节点js应用程序的应用程序, 该应用程序的想法是使客户端连接到Heroku服务器,然后服务器连接到本地应用程序,然后从本地应用程序检索数据,然后将其发送回服务器,然后服务器使用数据响应客户端。尝试将本地应用程序与服务器连接并将套接字保存在全局变量 clientSocket 上,以便我可以重用套接字将消息发送到本地应用程序。
问题是当在Heroku上部署本地应用程序后尝试连接服务器时,我设法将本地应用程序和服务器都连接到本地系统上。
服务器代码:
const net = require("net");
const httpServer = require("./server");
const dotenv = require("dotenv");
dotenv.config();
global.clientSocket = undefined;
let registeredClient = false;
const proxyServer = net.createServer((socket) => {
socket.on("data", (data) => {
if (!data) {
socket.write("Error in request");
throw new Error("Request message is empty");
}
let request;
try {
request = data.toString();
} catch (error) {
console.log(
new Error("Request message can not be conveted to String")
);
throw error;
}
if (request.includes("HTTP")) {
const httpSocket = new net.Socket();
if (!registeredClient) {
registeredClient = httpServer.setClientSocket(clientSocket);
console.log("Client registered");
}
httpSocket.connect(4444, () => {
console.log("Proxy Connected to http server");
});
httpSocket.on("error", (err) => {
console.error("Proxy error: Could not connect to http server");
throw err;
});
httpSocket.write(data, (err) => {
if (err) {
console.error(
"Proxy error :Could not send data to http server"
);
throw err;
}
});
httpSocket.on("data", (httpData) => {
if (!httpData) {
console.error(
"Proxy error: unable to retrive data from http server"
);
return;
}
socket.write(httpData.toString());
socket.end();
});
} else {
if (!clientSocket) clientSocket = socket;
console.log(socket);
}
});
socket.on("error", (err) => {
console.error("Proxy error: could not connect with client");
});
});
const port = process.env.PORT || 4000;
proxyServer.listen(port, () => {
console.log(`Proxy Server is running on port ${port}`);
});
httpServer.listen(4444, () => {
console.log("Http server is running on port 4444");
});
和本地应用代码:
const net = require("net");
let serverSocket;
serverSocket = net.connect(
{ host: "testt-clientt.herokuapp.com", port: 80 },
() => {
console.log("Client connected to Server");
}
);
// serverSocket = net.connect(4000, () => {
// console.log("Client connected to Server");
// });
serverSocket.write("Hellp");
serverSocket.on("data", (data) => {
console.log(data.toString());
if (data.toString().includes("GET")) {
serverSocket.write("data ......");
}
});
serverSocket.on("error", (err) => {
console.error("Could not connect to Server", err);
});
PS:我尝试使用不同的端口进行连接,唯一记录消息“客户端已连接到服务器”的端口是端口80,但是当我抛出该端口时,服务器未保存本地连接套接字
如果有更好的方法可以提出这个想法,请告诉我。
感谢您的帮助,对于任何语言错误,我和我感到抱歉,英语不是我的母语,并且由于缺乏信息,我对网站还是陌生的。