2015-03-02 130 views
0

我在本地主机上运行时有一个工作的node.js服务器,我可以从我的客户端(用java编写)发送和接收数据。但是,当我将server.js移到Openshift的VPS应用程序(免费)时,客户端不能再连接到server.js。将Node.js TCP服务器从本地主机移动到VPS(Openshift)

我已经按照说明上传了文件,我通过终端到服务器打开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,然后我粘贴到客户端。

那么,我需要做的代码,我必须使它连接?

回答

0

您需要侦听端口8080,而不是80端口尝试阅读了上港开发中心的这一部分绑定:https://developers.openshift.com/en/managing-port-binding-routing.html

+0

如果(且仅当)我从删除主机监听呼叫和server.js更改端口为8080,它开始听8080,但我仍然无法从客户端连接(将端口更改为8080/8000(保持ip))更多想法? – Dazing 2015-03-02 21:06:22

+0

您使用的是哪种盒式磁带?您不应该使用ssh服务器来运行您的应用程序。作为模板:https://github.com/openshift-quickstart/openshift-nodejs-http-and-websocket-example你应该怎么做 – 2015-03-02 21:15:29

+0

我已经能够使用示例中的客户端和服务器,但是我的java客户只是不想,如果你有任何想法如何解决这个随意告诉moi,但感谢您的帮助! – Dazing 2015-03-03 17:13:55

0

首先要注意的是,在港的server.js应等于Corey已经提到的process.env.OPENSHIFT_NODEJS_PORT8080

的第二个问题是,当你在本地计算机上运行客户端,主机你应该连接到提供给您的应用程序的URL,当你创建它像http://<appname>-<domain>.rhcloud.com。你可以看到你的应用程序的网址,当你发出命令:

rhc show-app <appname> 
相关问题