Übergeben Sie die Portnummer auf Seite in node.js/socket.io
Frage
Okay, ich habe einen einfachen Testserver mit Socket.io in node.js. Mein Ziel ist es, denselben Server auf verschiedenen Ports auszuführen, um einige ausgewogene Bedingungen und Synchronisierungstests zu testen.
So sieht der Server aus:
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
});
Die Frage ist: Was ist der einfachste Weg, um die Portnummer in Chat.html zu bringen (siehe Kommentar im obigen Code)? Gibt es eine Möglichkeit, dies mit Knoten oder FS zu tun? Muss ich mit Vorlagen eingerichtet werden?
Ich frage mich, welcher Knoten mich mit der Abfragezeichenfolge tun wird. Könnte ich den Port nur dort einkleben und ihn mit JQuery aussuchen, sobald die Seite geladen wird?
Danke im Voraus!
Lösung
HTML ist für statische Inhalte. Sie können also nicht für dynamische Inhalte verwenden. Der einfachste Weg ist also, Vorlagen wie EJS, Jade und JQuery -Vorlage zu verwenden.
Aber Sie möchten nicht, dass Sie den Inhalt von chat.html ändern können
function(err, data) {
data = data.replace() // like this
}
Ich empfehle nicht so.
Andere Tipps
Dies ist eine alte Frage, entschied sich jedoch, sie noch mit einer mehr passenden Antwort zu beantworten.
Da Sie denselben Port sowohl auf dem HTTP als auch auf dem Socket.io anhören, können Sie das Skript im Client einfach ändern, um eine Verbindung zu derselben Adresse wie die Webseite zu verbinden, wie dies:
var socket = io.connect(window.location.href);
Wenn der Server nur ein normaler WebSocket -Server war, können Sie stattdessen Folgendes tun:
var socket = new WebSocket(window.location.href.replace('http', 'ws'));