簡體   English   中英

將Node.js TCP服務器從localhost移動到VPS(Openshift)

[英]Move Node.js TCP server from localhost to VPS (Openshift)

我在localhost上運行時有一個工作的node.js服務器,我可以從我的客戶端發送和接收數據(用java編寫)。 但是,當我在Openshift(免費)中將server.js移動到VPS應用程序時,客戶端無法再連接到server.js。

我按照指示上傳了文件,我通過終端打開SSH連接到服務器,導航到repo文件夾(上傳文件所在的位置),運行“node server.js”(它似乎在線,沒有錯誤和打開。('在線',...)事件激活。

然后,當我在我的計算機上運行客戶端時,它無法連接到server.js。

server.js:

var os      = require('os');
var HOST    = process.env.OPENSHIFT_NODEJS_IP;;
var PORT    = process.env.PORT || 80;
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var net     = require('net');

console.log("Hostname: " + HOST + "\nPort: " + PORT);

if (cluster.isMaster) {
    cluster.SCHED_RR;


    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    Object.keys(cluster.workers).forEach(function(id){
        console.log("I am runnong with ID: " + cluster.workers[id].process.pid);
    });

    console.log('\n');

    cluster.on('online', function(worker) {
        console.log('Worker: ' + worker.process.pid + " listning on port " + PORT);
    });

    cluster.on('exit', function(worker, code, signal){
        console.log("Worker " + worker.process.pid + " died")
    });

} else {

    // Load the TCP Library
    net = require('net');

    // Keep track of the chat clients
    var clients = [];

    // Start a TCP Server
    var server = net.createServer(function (socket) {

        console.log('\n'); 
        // Identify this client
        socket.name = socket.remoteAddress + ":" + socket.remotePort 

        // Put this new client in the list
        clients.push(socket);

        // Send a nice welcome message and announce
        socket.write("Welcome " + socket.name + "\n\n");
        broadcast(socket.name + " joined the chat\n", socket);

        // Handle incoming messages from clients.
        socket.on('data', function (data) {
            //var ls = net.connect(5001, 'localhost');

            var string = data + "";

            //console.log(string);
            var message = string.split("|");

            broadcast("    Passing data from "+message[2]+" to "+message[1] + "\n    " + message[3], socket);


            //ls.write(string);
            //ls.end();

        });

        socket.on('connect', function(){
          broadcast("\n    New connection opened.\n");
        });

        // Remove the client from the list when it leaves
        socket.on('end', function () {
            clients.splice(clients.indexOf(socket), 1);
            broadcast("\n" + socket.name + " left the chat.\n");
        });

        // Send a message to all clients
        function broadcast(message, sender) {
            clients.forEach(function (client) {
                // Don't want to send it to sender
                if (client === sender) return;
                client.write(message);
            });
            // Log it to the server output too
            process.stdout.write(message)
        }

    })

    server.listen(PORT, HOST);

    server.on('error', function (e) {
        if (e.code == 'EADDRINUSE') {
            console.log('Address in use, retrying...');
            setTimeout(function () {
                server.close();
                server.listen(PORT, HOST);
            }, 1000);
        }
        else if (e.code == 'ECONNREFUSED') {
            console.log('Connection refused');
        }
    });

}

Client.java(相關部分)

public static void main(String args[]) {
    String s = getPackage();

    try {
        System.out.print("\n");

        /*InetAddress addr;
        Socket sock = new Socket("ex-std-node272.prod.rhcloud.com", 80);
        addr = sock.getInetAddress();
        System.out.println("Connected to " + addr);*/


        Socket skt = new Socket("127.10.100.1", 80);
        BufferedReader inStream = new BufferedReader(new
        InputStreamReader(skt.getInputStream()));

        DataOutputStream outStream = new DataOutputStream(skt.getOutputStream());

        //System.out.print("   Received string: '");

        //while (!inStream.ready()) {}
        //System.out.print(inStream.readLine()); // Read one line and output it

        System.out.print("'\n\n");

        // Send first message
        //outStream.writeByte(1);
        outStream.writeUTF(s);
        //outStream.flush(); // Send off the data
        //outStream.write(b,0,b.length);
        outStream.flush(); // Send off the data


    }
    catch(Exception e) {
        System.out.print("    Error: " + e);
    }

}

當我運行server.js(在VPS)它給我主機名:127.10.100.1和端口:80然后我粘貼到客戶端。

那么,我需要做什么才能使它連接?

您需要偵聽端口8080,而不是端口80.嘗試閱讀端口綁定上的開發人員中心的這一部分: https//developers.openshift.com/en/managing-port-binding-routing.html

首先要注意的是,你的server.js中的PORT應該等同於Corey已經提到過的process.env.OPENSHIFT_NODEJS_PORT8080

第二個問題是,當您在本地計算機上運行客戶端時,您應該在創建類似http://<appname>-<domain>.rhcloud.com應用程序時連接到應用程序的URL。 發出命令時,您可以看到應用程序URL:

rhc show-app <appname>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM