将端口号传递给node.js / socket.io中加载的页面

时间:2011-11-29 00:16:10

标签: 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的最简单方法是什么(请参阅上面代码中的注释)?有没有办法用node或fs做到这一点?我是否需要快速设置模板?

想知道什么节点会让我使用查询字符串;我可以直接将端口放在那里,并在页面加载后用jQuery选择它吗?

先谢谢!

2 个答案:

答案 0 :(得分:1)

html用于静态内容。所以你不能用于动态内容。 最简单的方法是使用ejs,jade和jquery模板等模板。

但您不希望您可以更改chat.html中的内容

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

我不推荐这种方式。

答案 1 :(得分:1)

这是一个老问题,但仍然决定以更合适的答案回答它。

因为您正在侦听http和socket.io上的同一个端口,所以您只需更改客户端上的脚本即可连接到加载网页时的相同地址,如下所示:

var socket = io.connect(window.location.href);

如果服务器只是一个普通的websocket服务器,你可以这样做:

var socket = new WebSocket(window.location.href.replace('http', 'ws'));