socket.io-die Bindung an eine bestimmte ip-Adresse
Ich habe einen windows server mit IIS und node.js mit sockel.io-für eine interaktive whiteboard-Anwendung, die ich entwickle. Ich möchte sowohl die IIS-website und node.js server auf port 80, aber gebunden an verschiedene IP-Adressen.
Aus was ich finden kann, Buchse.io nicht die Fähigkeit haben, geben Sie die ip-Adresse. Diese Einschränkung kann angeblich überwunden werden, indem eine http-server-Instanz. Ich bin neu in der Buchse.io und node.js und ich bin ein wenig verloren versuchen, dies zu tun. Ich werde gehören die ursprünglichen server-code (lauscht auf einem bestimmten port) und mein Versuch zu instanziieren server auf einer bestimmten IP-Adresse.
Original
(function() {
var io;
io = require('socket.io').listen(80);
io.sockets.on('connection', function(socket) {
socket.on('drawClick', function(data) {
socket.broadcast.emit('draw', {
x: data.x,
y: data.y,
type: data.type
});
});
});
}).call(this);
Geändert
(function() {
var host = "10.70.254.76";
var port = 80;
var http = require("http").createServer();
var io = require("socket.io").listen(http);
http.listen(port, host);
io.sockets.on('connection', function(socket) {
socket.on('drawClick', function(data) {
socket.broadcast.emit('draw', {
x: data.x,
y: data.y,
type: data.type
});
});
});
}).call(this);
Bekomme ich Fehler: hören Sie EACCES beim starten der geänderte code
port 80 ist und verboten gehört es zu sudoers (root-Benutzer) können Sie erzwingen, dass es mit "sudo Knoten app.js" aber ist keine gute Praxis.
InformationsquelleAutor TylerEKnight | 2012-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich sehen, niemand antwortete, so werde ich dies posten, nicht sicher, ob es hilft dir:
im Grunde schalten Sie einfach die Anrufe zu hören.
hier ist ein link zu einer ähnlichen Frage: stackoverflow.com/questions/9164915/...
Gut, ich bekomme EACCES wenn ich den port 80 mit der modifizierten Methode, aber ich bekomme keine Fehler bei der Verwendung von port 80 mit der ersten Methode( die, die sich nicht binden an eine bestimmte IP). Es ist ein windows-Rechner, und der Befehl wird als administrator ausführen.
was ist der genaue Fehler?
Nie Verstand, ich fand heraus, es war tatsächlich ein Problem mit, wie IIS verhält. Ich habe meine Lösung oben.
InformationsquelleAutor mindandmedia
Habe ich es geschafft!
Das problem liegt eigentlich mit IIS, und es ist socket pooling Verhalten. IIS automatisch behält sich port 80 für alle IP Adressen (auch wenn Sie derzeit nicht an eine Website).
Was ich zu tun hatte war, verwenden Sie den Befehl netsh, um die Standardeinstellung zu überschreiben Bindungen und binden die ip-Adressen über den netsh-Befehl.
Hier ist was ich getan habe. Diese Lösung funktioniert für IIS 7 unter Windows Server 2008 R2.
In meinem Fall habe ich nur eine aktive website serviert, die von IIS und hatte nur eine IP gebunden. Dieser befreite meine sekundäre IP-Adresse für die Knoten-zu hören auf es und port 80.
InformationsquelleAutor TylerEKnight