Mit Buchse.io mit nodejs auf einem server mit apache als reverse-proxy
Versuche ich zu nutzen Node.js mit Sockel.IO zu erleichtern messaging zwischen browser und client, folgenden die Anleitung.
Allerdings hatte ich zu setup-Knoten reverse-Proxy hinter Apache. Also, anstelle von Beispiel.com:8080 für Knoten, ich bin mit example.com/nodejs/.
Diese zu verursachen scheint Buchse.IO zu verlieren, Gefühl von sich selbst. Hier ist mein Knoten app
var io = require('socket.io').listen(8080);
//this has to be here, otherwise the client tries to
//send events to example.com/socket.io instead of example.com/nodejs/socket.io
io.set( 'resource', '/nodejs/socket.io' );
io.sockets.on('connection', function (socket) {
socket.emit('bar', { one: '1'});
socket.on('foo', function( data )
{
console.log( data );
});
});
Und hier ist, was meine client-Datei sieht wie
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Socket.IO test</title>
<script src="http://example.com/nodejs/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://example.com/nodejs/');
console.log( socket );
socket.on( 'bar', function (data)
{
console.log(data);
socket.emit( 'foo', {bar:'baz'} );
});
socket.emit('foo',{bar:'baz'});
</script>
</head>
<body>
<p id="hello">Hello World</p>
</body>
</html>
Das problem hier ist das Skript Verweis auf http://example.com/nodejs/socket.io/socket.io.js. Es kommt nicht die erwartete javasscript-content - stattdessen gibt es "Welcome to socket.io" als wenn ich auf http://example.com/nodejs/.
Irgendeine Idee, wie kann ich diese Arbeit machen?
- Ich weiß, das ist nicht die Frage (und bitte rufen Sie mich, ob ich öffnen sollte eine neue Frage ALSO), aber ich bin neugierig, was deine Apache httpd.conf aussieht. Ich habe die Proxyfunktion Satz bis zum übergeben aus, um die tatsächlichen node.js server, aber ich kann nicht das websockets-proxy arbeiten. Könntest du bitte ein Beispiel geben, wie Sie dabei mit Apache?
- Sorry, aber ich kann nicht. Dieses Projekt wurde in einem hackathon vor über 2 Jahren, und der server, der eingerichtet wurde, für die es nicht mehr gibt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese endete als ein multi-Säulen-Lösungen.
Zunächst auf der server-Seite der Dinge, ich hatte die Einrichtung der Endpunkte wie diese
Dann auf der client-Seite werden, um eine korrekte Verbindung sieht wie folgt aus
Danach alles funktioniert. Denken Sie daran, auf diesem server ist Apache proxying example.com/nodejs an port 8080 intern.
Ich glaube nicht, das hat nichts zu tun mit dem apache proxy, aber einige 'Macken', wie socket.io-Anforderungen verarbeitet, die auf einem sub-Verzeichnis. Siehe meine Antwort hier. NGINX-Konfiguration für die Arbeit mit Steckdose.IO
Im Grunde, Sie benötigen, um dieses connect-Anweisung statt:
var socket = io.connect('http://example.com', {resource:'nodejs/socket.io'});
{resource: ...
wird ersetzt durch{path: ...
Wenn jemand interessiert ist, nur dies funktionierte für mich.
Ersetzen Sie port 3000 mit Ihrem Nodejs-port
Apache 2.2.14 innerhalb Ihrer VirtualHost
Client-Seite Verbindung:
Keine Notwendigkeit, etwas zu ändern auf Node.js Seite.