将端口号传递到加载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挑选出来吗?
提前致谢!
解决方案
HTML用于静态内容。因此,您无法用于动态内容。如此最简单的方法是使用EJS,Jade和jQuery模板等模板。
但是您不希望您可以从chat.html更改内容
function(err, data) {
data = data.replace() // like this
}
我不建议这样。
其他提示
这是一个古老的问题,但决定以更适合的答案来回答。
因为您在http和socket.io上都在同一端口上收听,所以您只需更改客户端上的脚本即可连接到与网页相同的地址连接到同一地址,就像这样:
var socket = io.connect(window.location.href);
如果服务器只是普通的Websocket服务器,则可以做到这一点:
var socket = new WebSocket(window.location.href.replace('http', 'ws'));
不隶属于 StackOverflow