2011-11-29 14 views
0

さて、node.jsにsocket.ioを使用して簡単なテストサーバーを設定しました。私の目標は、負荷分散条件と同期テストをテストするために、いくつかの異なるポートで同じサーバーを実行することです。ここでnode.js/socket.ioにロードされたページにポート番号を渡します。

サーバは次のようになります。

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でこれを行う方法はありますか? Expressをテンプレートでセットアップする必要がありますか?

ワンダー質問文字列をどのノードで処理させるかわかりません。ページが読み込まれたらjQueryでポートを張ってそれを選ぶことができますか?

ありがとうございました!

+1

私はあなたがテンプレートを使用するお勧めします。 – Raynos

+0

@レイノス - なぜですか?パフォーマンス/技術的利点は何ですか?他の可能性は何ですか? – Kato

答えて

1

htmlは静的コンテンツ用です。動的なコンテンツには使用できません。 最も簡単な方法は、ejs、jade、jqueryテンプレートなどのテンプレートを使用することです。

しかし、あなたは、あなたが、私はこの方法をお勧めしていないよchat.html

function(err, data) { 
    data = data.replace() // like this 
} 

から内容を変更することができますしたくありません。

+0

私はejsやjadeを使っていないので、「もっとも簡単」はちょっと主観的なようです。(しかしあなたの好みを提供してくれてありがとう) – Kato

1

これは古い質問ですが、より適切な回答で回答することにしました。

あなたはhttpとsocket.ioの両方で同じポートでリッスンしているので、あなただけのWebページがそうのように、ロードされたのと同じアドレスに接続するクライアント上でスクリプトを変更することができます。

var socket = io.connect(window.location.href); 
サーバが普通のWebSocketサーバーだった場合

、あなたの代わりにこれを行うことができます:

var socket = new WebSocket(window.location.href.replace('http', 'ws')); 
関連する問題