node.js/socket.ioにロードされたページにポート番号を渡す
質問
さて、socket.ioを使用してnode.jsを使用して簡単なテストサーバーを設定しています。私の目標は、いくつかの異なるポートで同じサーバーを実行して、いくつかの負荷バランスの取れた条件と同期テストをテストすることです。
サーバーがどのように見えるかは次のとおりです。
var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
fs = require('fs'),
port = process.argv[1]; // listen on port number passed via command line
app.listen(port);
function handler (req, res) {
console.log('request', {remotePort: req.connection.remotePort, remoteAddress: req.connection.remoteAddress, url: req.url});
// how do I pass the port number here?
fs.readFile(__dirname + '/chat.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading chat.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
// do chatty stuff
});
問題は、ポート番号をchat.htmlに入れる最も簡単な方法は何ですか(上記のコードのコメントを参照)?ノードまたはFSでこれを行う方法はありますか?テンプレートでセットアップを表現する必要がありますか?
ノードがクエリ文字列でどのようにできるのか疑問に思います。ポートをそこに貼り付けて、ページが読み込まれたらjQueryで選ぶことができますか?
前もって感謝します!
解決
HTMLは静的な内容用です。したがって、動的な内容には使用できません。非常に簡単な方法は、EJS、Jade、JQueryテンプレートなどのテンプレートを使用することです。
しかし、あなたはchat.htmlからコンテンツを変更できることを望んでいません
function(err, data) {
data = data.replace() // like this
}
私はこの方法をお勧めしません。
他のヒント
これは古い質問ですが、まだより適した答えで答えることにしました。
HTTPとsocket.ioの両方で同じポートで聞いているため、クライアントのスクリプトを変更して、Webページがロードされたのと同じアドレスに接続するだけです。
var socket = io.connect(window.location.href);
サーバーが通常のWebsocketサーバーである場合、代わりにこれを行うことができます。
var socket = new WebSocket(window.location.href.replace('http', 'ws'));
所属していません StackOverflow