我在本地主机上运行时有一个工作的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,然后我粘贴到客户端。
那么,我需要做的代码,我必须使它连接?
如果(且仅当)我从删除主机监听呼叫和server.js更改端口为8080,它开始听8080,但我仍然无法从客户端连接(将端口更改为8080/8000(保持ip))更多想法? – Dazing 2015-03-02 21:06:22
您使用的是哪种盒式磁带?您不应该使用ssh服务器来运行您的应用程序。作为模板:https://github.com/openshift-quickstart/openshift-nodejs-http-and-websocket-example你应该怎么做 – 2015-03-02 21:15:29
我已经能够使用示例中的客户端和服务器,但是我的java客户只是不想,如果你有任何想法如何解决这个随意告诉moi,但感谢您的帮助! – Dazing 2015-03-03 17:13:55