私は簡単なチャットアプリを作ろうとしています。ローカルホスト上で正常に動作しますそれ:それは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)だけがわかった、つまり私は、両方の私をローカルでアプリケーションを実行するとlocalhost
とOpenShiftは私のマシンでローカルに動作しています。携帯電話を使用して同じOpenShiftリンクを取得した場合、http
サーバはリッスンしていないため、チャットできません。上記の情報に基づいて
私は手動でchat.htmlの127.0.0.1を127.5.69.129(Openshift IP)に置き換えましたが、それでも動作しませんでした。ポート9999のソケット接続は確立されていません。確立されていると、「ようこそ、ユーザー1」(server.jsから)が表示されるためです。何も表示されません。多分IPとポート以上のものがありますか?私はGIthubでも自分のコードを更新しました – HoKy22
多分ポート番号と関係がありますか? https://developers.openshift.com/managing-your-applications/port-binding-routing.htmlまたはOpenShiftは2つのポートを許可していませんか? – HoKy22
@ HoKy22はもちろん、127.0.0.1をIPに置き換えたときには機能しませんでした。これはあなたのギアに割り当てられたランダムな内部OpenShift IPです。 1.パブリックホスト名とポート80または443を使用して、クライアントからアプリケーションにアクセスします。 2.これがhttpトラフィックであることを確認します* only *; 3. OpenShiftブローカーが、そのトラフィックをリダイレクトするための内部サービスを知っていることを確認します(つまり、ポート9999または3000のいずれかを決定しますが、両方ではありません)。 –