将本地Nodejs应用程序连接到在Heroku上部署的服务器

时间:2020-09-24 17:42:04

标签: javascript node.js express heroku

我正在尝试构建将本地节点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,但是当我抛出该端口时,服务器未保存本地连接套接字

如果有更好的方法可以提出这个想法,请告诉我。

感谢您的帮助,对于任何语言错误,我和我感到抱歉,英语不是我的母语,并且由于缺乏信息,我对网站还是陌生的。

0 个答案:

没有答案