À l'aide d'une douille.io avec nodejs sur un serveur avec apache comme proxy inverse
Je suis d'essayer d'utiliser Node.js avec la Prise.IO pour faciliter la messagerie entre le navigateur et le client, à la suite de le guide.
Cependant, j'ai du Nœud d'installation de reverse-proxy derrière Apache. Ainsi, au lieu d'exemple.com:8080 pour le nœud, je suis en utilisant example.com/nodejs/.
Cela semble provoquer une Prise.IO à perdre le sens de lui-même. Voici mon nœud application
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 );
});
});
Et voici ce que mon fichier client ressemble
<!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>
Le problème ici, c'est la référence de script à http://example.com/nodejs/socket.io/socket.io.js. Il ne renvoie pas le devrait javasscript contenu - au contraire, il renvoie "Bienvenue à douille.io" comme si je frappe http://example.com/nodejs/.
Aucune idée de comment je peux faire ce travail?
Désolé, mais je ne peux pas. Ce projet a été réalisé lors d'un hackathon sur 2 ans et le serveur qui a été mis en place pour qu'elle n'existe plus.
OriginalL'auteur Peter Bailey | 2012-05-03
Vous devez vous connecter pour publier un commentaire.
Cela a fini par être un multi-factorielle des solutions.
D'abord, sur la fin du serveur de choses, j'ai eu à configurer les paramètres comme ceci
Puis, sur le côté client, pour se connecter correctement ressemble à ceci
Après cela, tout a fonctionné. Rappelez-vous, sur ce serveur Apache en proxy example.com/nodejs le port 8080 en interne.
OriginalL'auteur Peter Bailey
Je ne pense pas que cela a quelque chose à faire avec votre proxy apache, mais quelques "bizarreries" avec combien de socket.io, qui gère les requêtes sur un sous-répertoire. Voir ma réponse ici. NGINX configuration de travailler avec la Prise.IO
Fondamentalement, vous avez besoin pour utiliser cette déclaration de connexion à la place:
var socket = io.connect('http://example.com', {resource:'nodejs/socket.io'});
{resource: ...
est remplacé par{path: ...
OriginalL'auteur Timothy Strimple
Si quelqu'un est intéressé, seulement cela a fonctionné pour moi.
Remplacer le port 3000 avec votre Nodejs port
Apache 2.2.14 à l'intérieur de votre VirtualHost
Côté Client de la connexion:
Pas besoin de changer quoi que ce soit sur Node.js côté.
OriginalL'auteur Ulterior