Déploiement OpenShift NodeJS: socket.io index.html affectation de port, etc.

J'ai localement écrit une application nodeJS utilisant les modules socket.io et express. Je voulais utiliser openshift pour l'hébergement. J'ai donc changé le principal .js vers server.js qui semble être l'équivalent de l'index du fichier openshift et modifié le paramètre du port du serveur pour:

Var server = require ('http'). CreateServer (application) .listen (process.env.OPENSHIFT_NODEJS_PORT || 3000);

Comme indiqué dans certains articles. Cependant, après le git commit, je reçois toujours:

Distant: info: socket.io démarré à distance: warn: erreur soulevée: Error: listen EACCES remote: DEBUG: nœud de programme server.js sort avec code 0 remote: remote: DEBUG: Démarrage d'un processus enfant avec 'node server.js'

Et le site ne fonctionne pas.

Comme l'application sert un fichier html, il y a deux autres endroits, où le port est mentionné, qui se trouve dans l'index.html qui est desservi:

entête:

<script src='//localhost:3000/socket.io/socket.io.js'></script> 

Et dans javascript pour le fichier html:

 var socket = io.connect('//localhost:'+process.env.OPENSHIFT_NODEJS_PORT || 3000); 

// vals intial et multi liste à partir du serveur socket.on ('clientConfig', onClientConfig);

Tous les fichiers et modules sont apparemment téléchargés, mais l'erreur EACCES prévaut encore.

J'ai l'impression que peut-être le lien d'en-tête vers localhost: 3000 pourrait être le point de saut, mais je ne suis pas sûr. Quelqu'un a une idée, quel est le problème? En outre, il n'y a pas de fichier socket.io/socket.io.js dans le dossier modules socket.io, ce que je trouve déroutant.

J'avais récemment développé une application de client de chat en utilisant socket.io et aussi eu webrtc en elle. J'ai pu déployer l'application sur openshift en faisant les modifications suivantes en code.

Côté client

Gardez la balise de script d'inclusion de manière relative comme

<script src="/socket.io/socket.io.js"></script>

Tout en déclarant io.connection, modifiez la partie ip pour pointer l'application vers le serveur dans ce format.

var socket = io.connect('http://yourapp-domain.rhcloud.com:8000/', {'forceNew':true });

8000 est pour http et 8443 est pour https

Du côté serveur

Le io et le serveur doivent tous deux écouter sur le même port et l'ordre dans lequel les instructions sont exécutées devrait également être attentif.

Étape 1: déclarez le serveur HTTP à l'aide de l'application. (L'application est obtenue par exprès)

var express = require('express');var app = express();) var server = require('http').Server(app);

Étape 2:

Déclarez io de socket.io et combinez-le avec l'objet serveur. var io = require('socket.io').listen(server);

Étape 3:

Maintenant, permettez au serveur d'écouter le port openshift et l'adresse IP.

server.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);

Veuillez prendre une attention particulière à l'ordre des déclarations que vous écrivez, c'est l'ordre qui entraîne des problèmes.

Le côté serveur de votre websocket doit écouter sur le port 8080 sur votre adresse IP openshift, le côté CLIENT doit se connecter à votre ws: //app-domain.rhcloud.com: 8000

J'ai quelques notes sur la façon d'utiliser WebSockets ici: https://www.openshift.com/blogs/10-reasons-openshift-is-the-best-place-to-host-your-nodejs-app#websockets

Vous n'avez besoin d'aucun changement supplémentaire sur le serveur après avoir adapté votre code pour profiter des variables d'environnement (si disponible)

La couche de routage d'OpenShift expose votre application sur plusieurs ports accessibles à l'extérieur: 80, 443, 8000, 8443.

Les ports 8000 et 8443 sont tous deux capables de gérer les mises à niveau de la connexion Web. Nous espérons ajouter rapidement des connexions WebSocket sur les ports 80 et 443.