Socket.io-Client ignoriert Port, wenn Namespace verwendet wird [Fehler?]

9

Ich habe eine einfache node.js-App mit socket.io (1.3.5), die aus socket.io-Beispielen stammt:

%Vor%

Nun verbinde ich mich in meinem Front-End wie folgt mit diesen spezifischen Namespaces (wiederum aus dem Beispiel):

%Vor%

Die App läuft auf Port 3000 und die Webseite wird mit der URL localhost:3000 geöffnet.
Wenn ich dabei CORS-Fehler bekomme, scheint Socket.io auf der Client-Seite die Port-Nummer nicht automatisch zu erkennen, sobald ich Namespaces benutze (in Firefox-Dev-Tools kann ich sehen, dass Anfragen an localhost/ anstatt an% gehen Code%).

Wenn ich auf meiner Serverseite keine Namespaces verwende:

%Vor%

Und am Frontend schließe ich mich an:

%Vor%

Alles funktioniert gut, Port Auto-Discovery funktioniert und in Firefox-Dev-Tools kann ich sehen, dass Verbindungen zu localhost:3000/ hergestellt werden.

Alternativ, wenn ich noch Namespaces auf meinem Backend verwende, und am Frontend verbinde ich mich so:

%Vor%

Wieder funktioniert alles (und tatsächlich kann ich in den Firefox-Dev-Tools sehen, dass Netzwerkanforderungen zu localhost:3000/ gehen).

Warum funktioniert die automatische Port-Erkennung nicht mit Namespaces? Gibt es eine Möglichkeit, es zum Laufen zu bringen? Fehle ich hier etwas? Vielen Dank.

Siehe meine Antwort unten für eine Reparatur ...

    
Daniel Gruszczyk 26.03.2015, 23:13
quelle

3 Antworten

0

Ok, also habe ich Code in socket.io.js debuggt und festgestellt, dass dort ein potentieller Fehler ist. In Zeile 1050 wird ein loc.hostname anstelle von loc.host verwendet. Dies führt dazu, dass beim Übergeben eines Namespace ein Hostname verwendet wird, der keine Portnummer enthält.
Wenn kein Namespace verwendet wird, wird in Zeile 1024 loc.host verwendet und alles ist in Ordnung.
Ich habe eine Kopie der Datei genommen und Zeile 1050 geändert, um Host zu verwenden, und alles funktioniert gut.
Found github Problem damit, es ist in 1.4.x behoben: Ссылка

    
Daniel Gruszczyk 08.02.2016, 08:31
quelle
0

Sie müssen sich nicht mit Ports anlegen, es sollte eigentlich nur funktionieren

%Vor%     
kaytrance 03.12.2015 11:11
quelle
0

Ich glaube nicht, dass es eine Möglichkeit gibt, die automatische Port-Erkennung zu aktivieren, ohne den tatsächlichen Socket.io -Code zu ändern oder auf einen Fix zu warten. Die einfachste Sache, die Sie tun könnten, ist nur die aktuelle location.port einschließlich eines Doppelpunkts vor Ihrem Namespace einzufügen.

%Vor%

Oder erstellen Sie eine neue Funktion, die einen Socket für Sie erstellt.

%Vor%     
Stilldabomb 02.01.2016 05:58
quelle