passare numero di porta da pagina è caricata in node.js / socket.io
Domanda
Va bene, ho un semplice server di prova configurato con socket.io in node.js. Il mio obiettivo è quello di eseguire lo stesso server su un paio di porte diverse per testare alcune condizioni equilibrato di carico e di sincronizzazione.
Ecco cosa gli sguardi server come:
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
});
La domanda è: qual è il modo più semplice per ottenere il numero della porta in chat.html (vedi commento in codice di cui sopra)? C'è un modo per fare questo con nodo o fs? Devo espresso impostato con i modelli?
Wonder quale nodo mi lascia fare con la stringa di query; potrei solo bastone il porto in là e prenderlo fuori con jQuery, una volta caricata la pagina?
Grazie, in anticipo!
Soluzione
HTML è per i contenuti statici. quindi non è possibile utilizzare per i contenuti dinamici. così modo più semplice è utilizzare i modelli come ejs, giada e template jquery.
, ma non si desidera è possibile modificare i contenuti da chat.html
function(err, data) {
data = data.replace() // like this
}
Non mi raccomando questo modo.
Altri suggerimenti
Questa è una vecchia questione, ma ha deciso di rispondere con un altro atto a soddisfare risposta ancora.
Perché si sta ascoltando sulla stessa porta sia sul http e socket.io, si può semplicemente modificare lo script sul client per connettersi allo stesso indirizzo della pagina web è stata caricata, in questo modo:
var socket = io.connect(window.location.href);
Se il server era solo un server websocket normale, si potrebbe fare invece questo:
var socket = new WebSocket(window.location.href.replace('http', 'ws'));