2014-04-07 6 views
6

Ich versuche, eine Verbindung zu einem socket.io Server hinter einem Apache Reverse-Proxy herzustellen. Ich habe auf Port Apache laufen 8888. Der NodeJS Server auf der gleichen Maschine auf Port läuft 9096. Für die Proxy-Prüfung wird wie folgt auf meinem lokalen Rechner konfiguriert:So verbinden Sie socket.io über einen Reverse-Proxy

ProxyPass /some/path http://localhost:9096 
ProxyPassReverse /some/path http://localhost:9096 

Im Client-Code, den ich so etwas tun :

var socketUrl = 'http://localhost:8888/some/path/namespace'; 
var socket = io.connect(socketUrl); 

Dies führt zu folgendem Verhalten.

Zuerst mein Client fordert die socket.io.js Skript an:

http://localhost:8888/some/path/socket.io/socket.io.js 
-> 200 ok 

Dann wird die Buchse versucht an verbinden:

localhost:8888/socket.io/1?123983759 
-> 404 not found 

ich die "Ressource" Konfiguration für Sockel gefunden haben. io, aber dies scheint nur auf die Stelle zu verweisen, von der das socket.io.js-Skript abgerufen wird, aber nicht auf die URL, mit der es sich verbindet. Es scheint sich immer mit der Wurzel des Client-Ursprungs zu verbinden.

Wie könnte ich es localhost machen verbinden: 8888/some/path/socket.io/1 123983759

?

Antwort

8

In Ihrem Client-Code müssen Sie den Basispfad mit der Ressource Option gesetzt, etwa so:

var socket = io.connect('http://localhost:8888', {resource: '/some/path/socket.io'}); 
+0

OK nun versucht, es zu verbinden, was scheint die richtige URL zu sein. Der Handshake ist abgeschlossen, aber der Status der Anfrage (socket.io/1?t=123983759) ist jetzt "abgebrochen". Wenn ich die gleiche URL im Browser verwende, gibt es einfach so etwas wie "xrf021YGWWEF5NUHoyTD: 60: 60: websocket" ohne Probleme zurück. Ich weiß nicht, was los ist. –

+0

Mit "handshake is made" meine ich nodejs druckt "info - handshake authorised 05T-Uzt9CmK4SrN8sPQJ" –

+0

Ich habe es zur Arbeit gebracht, kann mich aber nicht erinnern, warum ich in das abgesagte Problem gerannt bin. Ich denke, es hat mit meinen Einstellungen für den Reverse-Proxy und nicht mit den Einstellungen von socket.io zu tun. Für socket.io Version 1.0 wurde die Ressourcenoption durch 'Pfad' ersetzt. Fand das hilfreich zu sein http://blog.seafuj.com/migrating-to-socketio-1-0 –