2016-12-29 44 views
0

我正在尝试制作一个简单的聊天应用程序。它在本地主机上正常工作:3000/chat.html,但是当它被部署在OpenShift,它崩溃,出现以下错误:(我rhc tail日志后)events.js:72扔呃; //未处理'错误'事件^错误:在OpenShift上侦听EACCES

编辑:我不明白这个错误更多

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: listen EACCES 
    at errnoException (net.js:905:11) 
    at Server._listen2 (net.js:1024:19) 
    at listen (net.js:1065:10) 
    at net.js:1147:9 
    at dns.js:72:18 
    at process._tickCallback (node.js:442:13) 
    at Function.Module.runMain (module.js:499:11) 
    at startup (node.js:119:16) 
    at node.js:929:3 
DEBUG: Program node server.js exited with code 8 
DEBUG: Starting child process with 'node server.js' 

我看了一下这个错误,它并没有解决我的问题类似的帖子。 1)我绑定在高port (3000) 2)我的地址是不使用(否则,我会得到EADDRRINUSE)3)我有OpenShift另一个应用程序正在收听port 3000,但我认为他们不应该影响对方因为是不同

这里是我的package.json:

{ 
    "name": "chat", 
    "version": "1.0.0", 
    "description": "", 
    "main": "server.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "bcrypt-nodejs": "0.0.3", 
    "body-parser": "^1.15.1", 
    "cookie-parser": "^1.4.3", 
    "express": "^4.13.4", 
    "express-session": "^1.14.2", 
    "multer": "^1.1.0", 
    "sockjs": "^0.3.18" 
    } 
} 

这里是我的server.js:

var express = require('express'); 
var app = express(); 
var session  = require('express-session'); 

var http = require('http'); 
var sockjs = require('sockjs'); 

var connections = []; 
var chat = sockjs.createServer(); 
chat.on('connection', function(conn) { 
    connections.push(conn); 
    var number = connections.length; 
    conn.write("Welcome, User " + number); 
    conn.on('data', function(message) { 

     for (var ii=0; ii < connections.length; ii++) { 
      connections[ii].write("User " + number + " says: " + message); 
     } 
    }); 
    conn.on('close', function() { 
     for (var ii=0; ii < connections.length; ii++) { 
      connections[ii].write("User " + number + " has disconnected"); 
     } 
    }); 
}); 

var server = http.createServer(); 
chat.installHandlers(server, {prefix:'/chat'}); 
server.listen(9999, '127.0.0.1'); 

app.use(express.static(__dirname + '/public')); 

var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; 
var port  = process.env.OPENSHIFT_NODEJS_PORT || 3000; 

app.listen(port, ipaddress, function() { 
    console.log("Listening on " + ipaddress + ", port " + port) 
}); 

我有固定下来在这部分server.js的错误,如果我评论它,聊天显然不会工作,但我可以部署它在OpenShift。我是否在创建socketHTTP服务器错误OpenShift

var connections = []; 
var chat = sockjs.createServer(); 
chat.on('connection', function(conn) { 
    connections.push(conn); 
    var number = connections.length; 
    conn.write("Welcome, User " + number); 
    conn.on('data', function(message) { 

     for (var ii=0; ii < connections.length; ii++) { 
      connections[ii].write("User " + number + " says: " + message); 
     } 
    }); 
    conn.on('close', function() { 
     for (var ii=0; ii < connections.length; ii++) { 
      connections[ii].write("User " + number + " has disconnected"); 
     } 
    }); 
}); 

var server = http.createServer(); 
chat.installHandlers(server, {prefix:'/chat'}); 
server.listen(9999, '127.0.0.1'); 

编辑: 相反的:

var server = http.createServer(); 
chat.installHandlers(server, {prefix:'/chat'}); 
server.listen(9999, '127.0.0.1'); 

尝试这样做,也没有对OpenShift工作,也能正常工作的本地主机:3000/chat.html

app.set('port', 9999); 
var server = http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 
chat.installHandlers(server, {prefix:'/chat'}); 

编辑: 我把这个线后一路在顶部

var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; 

相反的:

var server = http.createServer(); 
chat.installHandlers(server, {prefix:'/chat'}); 
server.listen(9999, '127.0.0.1'); 

我:

var server = http.createServer(app).listen(app.get('port'), ipaddress, function(){ 
    console.log('Express server listening on port ' + app.get('port') + ', ip: ' + ipaddress); 
}); 
chat.installHandlers(server, {prefix:'/chat'}); 

现在,不会再崩溃,但http服务器不在监听。

调试信息:

1)本地主机:

Http server listening on port 9999, ip: 127.0.0.1 
Express server listening on 127.0.0.1, port 3000 

OpenShit:

Http server listening on port 9999, ip: 127.5.69.129 
Express server listening on 127.5.69.129, port 8080 

2)刚刚发现的是,当我运行应用程序在本地,然后我的两个localhostOpenShift在我的机器上本地工作。如果我使用我的手机获取相同的OpenShift链接,http服务器不在监听,所以我无法聊天。

回答

0

基于以上信息,短期freenode的聊天,我们刚刚和这两个文件,我们看了一下:

您生成的html代码包含正在尝试连接到本地主机:9999的javascript函数 - 这就是为什么没有本地服务器运行,客户端将无法连接。

我不是nodejs专家,所以我不能评论从nodejs角度的根本原因,但我会建议看看如何正确配置从客户端创建的反向连接。

+0

我手动将chat.html中的127.0.0.1替换为127.5.69.129(Openshift IP),但它仍然无法工作。端口9999上的套接字连接未建立,因为如果它已建立,它将显示“Welcome,User 1”(来自server.js)。什么都不显示,也许不仅仅是IP和端口?我在GIthub也更新了我的代码 – HoKy22

+0

也许它确实与端口号有关? https://developers.openshift.com/managing-your-applications/port-binding-routing.html或OpenShift不允许两个端口? – HoKy22

+0

@ HoKy22当然,当你使用IP替换127.0.0.1时,它不起作用 - 这是分配给你的设备的随机内部OpenShift IP。您需要:1.使用公共主机名和端口80或443从客户端访问您的应用程序; 2.确保这是http流量* only *; 3.确保OpenShift代理知道什么内部服务重定向该流量(即决定端口9999或3000,但不是两者) –

相关问题