2016-12-29 6 views
0

私は簡単なチャットアプリを作ろうとしています。ローカルホスト上で正常に動作しますそれ:それはOpenShift上に配備されたときに3000/chat.html、しかし、それは次のエラーでクラッシュ:events.js:72 throw er; //未処理の 'エラー'イベント^エラー:OpenShiftでEACCESを聞きます。

EDIT(私は、ログをrhc tail後):私は得ることはありませんこのエラーは

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)私はport 3000を聴いているOpenShift上の別のアプリケーションを持っているが、私は、彼らが影響を与えてはならないと思います

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) 
}); 
:ここ
{ 
    "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です: ドメインが異なるため、それぞれ他はここ

は私のpackage.jsonです

私はを固定しましたserver.jsのこの部分にエラーがありますが、私がコメントアウトすればチャットは明らかにうまくいかないでしょうが、OpenShiftに展開できます。 socketまたはHTTPサーバーを間違って作成していますか?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'); 

EDIT: の代わりに:

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'; 

にこのラインを入れた後 :

EDIT

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サーバはリッスンしていません。

DEBUG INFO:

1)はlocalhost:

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コードは、Aが含まれ

をlocalhost:9999に接続しようとしているjavascript関数であり、ローカルサーバーが実行されていなければ、クライアントは接続に失敗します。

私はnodejsの専門家ではないので、nodejsの観点から根本的な原因についてはコメントできませんが、クライアントから作成された逆接続を正しく設定する方法を検討することをお勧めします。

+0

私は手動でchat.htmlの127.0.0.1を127.5.69.129(Openshift IP)に置き換えましたが、それでも動作しませんでした。ポート9999のソケット接続は確立されていません。確立されていると、「ようこそ、ユーザー1」(server.jsから)が表示されるためです。何も表示されません。多分IPとポート以上のものがありますか?私はGIthubでも自分のコードを更新しました – HoKy22

+0

多分ポート番号と関係がありますか? https://developers.openshift.com/managing-your-applications/port-binding-routing.htmlまたはOpenShiftは2つのポートを許可していませんか? – HoKy22

+0

@ HoKy22はもちろん、127.0.0.1をIPに置き換えたときには機能しませんでした。これはあなたのギアに割り当てられたランダムな内部OpenShift IPです。 1.パブリックホスト名とポート80または443を使用して、クライアントからアプリケーションにアクセスします。 2.これがhttpトラフィックであることを確認します* only *; 3. OpenShiftブローカーが、そのトラフィックをリダイレクトするための内部サービスを知っていることを確認します(つまり、ポート9999または3000のいずれかを決定しますが、両方ではありません)。 –

関連する問題