2011-11-29 60 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?我需要快速设置模板吗?

不知道什么节点会让我处理查询字符串;我可以将端口粘在那里,并在页面加载后用jQuery挑出它?

谢谢,提前!

+1

我建议你使用模板。 – Raynos

+0

@Raynos - 为什么?任何想法是什么性能/技术优势?其他可能性是什么? – Kato

回答

1

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

,但你不希望你可以从chat.html

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

更改内容我不推荐这种方式。

+0

“最简单”似乎有点主观,因为我不使用ejs或玉:(但是,感谢您提供您的偏好;) – Kato

1

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

因为你的HTTP和socket.io相同的端口上侦听,你可以改变脚本中的客户端连接到同一地址的网页加载,就像这样:

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

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

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