IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Accéder à une application


Sujet :

NodeJS

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut Accéder à une application
    Bonjour à tous !

    Je viens ici vous poser une question plutôt simple mais dont je n'ai pas encore trouvé de réponse claire.

    J'aimerais que d'autres ordinateurs puissent accéder à mon serveur.

    En effet, mon application marche en local sur mon ordinateur et j'y accède depuis "localhost:numéro_de_port", mais si je rentre l'adresse: "http://mon_ip:numéro_de_port" (obtenu via la commande ipconfig) cela ne marche pas.

    Auriez-vous des solutions pour m'éclairer s'il-vous-plaît ?

    J'aimerais dans un premier temps rendre l'accès possible aux ordinateurs de mon réseau, puis dans un second temps depuis internet.

    Je vous remercie de votre considération

  2. #2
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    quelle code tu utilise

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Par défaut
    Bonjour,

    Il faut ouvrir le port que tu utilise pour ton application sur ta box et le rediriger vers ta machine.
    Je te conseille aussi un serveur http comme nginx.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    si je rentre l'adresse: "http://mon_ip:numéro_de_port" (obtenu via la commande ipconfig) cela ne marche pas
    que ce soit avec le module http, express ou ce que tu veux, tu dois avoir qqpart un server.listen([options]). Dans les options, tu dois avoir un localhost ou 127.0.0.1. tu écoute donc sur la "boucle locale"
    avec un ifconfig, tu as l'adresse ip qu'a attribué ta box à la carte réseau de ta machine.

    Donc dans server.listen() (certainement dans app.js) tu dois mettre l'ip que tu as obtenu avec ton ifconfig.

    puis dans un second temps depuis internet
    là cela ce joue au niveau de ta box. ip_public_unique<-------->box<------->ip_locale_ou_ton_serveur_node_ecoute_obtenu_avec_ifconfig
    tu dois donc attribuer un port coté ip_public, à l'ip_locale_ou_ton_serveur_node_ecoute_obtenu_avec_ifconfig. ou alors, si tu en as la possibilité, tu passe ta box en ipv6...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    Merci à tous pour vos réponses.

    quelle code tu utilise
    Alors j'utilise NodeJS, et disons pour simplifier que c'est juste un serveur web qui vous affiche une page lorsque vous vous connectez dessus. Basiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var server = http.createServer(function(req, res) {
        fs.readFile('./index.html', 'utf-8', function(error, content) {
            res.writeHead(200, {"Content-Type": "text/html"});
            res.end(content);
        });
    });
    server.listen(port);
    }

    Bonjour,

    Il faut ouvrir le port que tu utilise pour ton application sur ta box et le rediriger vers ta machine.
    Je te conseille aussi un serveur http comme nginx.
    Pour ce qui est du serveur http j'aimerais me débrouiller sans car mon application jouerait ce rôle justement.
    EDIT: Rediriger un port ça serait donc pour y accéder depuis Internet, en cherchant dans les options de ma box je pense avoir trouvé!

    que ce soit avec le module http, express ou ce que tu veux, tu dois avoir qqpart un server.listen([options]). Dans les options, tu dois avoir un localhost ou 127.0.0.1. tu écoute donc sur la "boucle locale"
    avec un ifconfig, tu as l'adresse ip qu'a attribué ta box à la carte réseau de ta machine.

    Donc dans server.listen() (certainement dans app.js) tu dois mettre l'ip que tu as obtenu avec ton ifconfig.
    Oui en effet, j'ai bien un , et apparemment si on ne précise rien il prend localhost. J'ai donc changé ce morceau de code par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    server.listen({
      host: '192.168.xxxx.xxxx',
      port: pppp
    });
    EDIT: En fait j'ai utilisé un PC sous Windows 8, et je me suis rendu compte que je ne pouvais même pas le pinger ^^, donc j'ai refais mes tests avec un autre PC et ça marche en local merci!

    là cela ce joue au niveau de ta box. ip_public_unique<-------->box<------->ip_locale_ou_ton_serveur_node_ecoute_obtenu_avec_ifconfig
    tu dois donc attribuer un port coté ip_public, à l'ip_locale_ou_ton_serveur_node_ecoute_obtenu_avec_ifconfig. ou alors, si tu en as la possibilité, tu passe ta box en ipv6...
    Je vais regarder ça merci !

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    Bonjour,

    Je vais devoir vous détailler un peu plus pour vous amener à mon problème actuel:

    Mon serveur utilise socket.io.
    Si un client entre la bonne adresse, il arrive sur mon serveur, mais si je rentre cette adresse depuis le réseau derrière ma box, ça ne marche pas car pour y accéder c'est 192.168.x.x.

    Il y aurait -t-il un moyen de vérifier que la connexion s'est bien effectuée entre le client et le serveur avec io.connect svp?

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Comme indiqué précédemment, avoir accès à ton site au delà de ta box n'a rien à voir avec node.js, socket.io ou le language/framework/trucmuche que tu veux sur ta machine!

    c'est un problème de routage réseau. tu as un seul tuyau sur ta box qui va vers l'internet (la ligne téléphonique), et (en moyenne) 4 tuyau (les ports ethernet) et même bcp plus( via le wifi) partant de ta box pour aller à ta/tes machines.
    Ton routeur (dans la box) ne peux pas deviner suite à une demande d'un client venant d'internet (donc du tuyau unique), sur quel tuyau local ce trouve ton serveur susceptible de répondre à la demande du client...

    le détail est ici http://lalitte.developpez.com/tutori...d-adresse-nat/

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    Merci pour le tuyau, pour la redirection Internet --- Box --- Serveur sur machine locale ça devrait fonctionner je vais continuer les tests.

    En fait mon problème est différent: si un client veut se connecter depuis internet ça marche car il se rend à mon adresse. mais si un client veut se connecter depuis le réseau local, ça ne marche pas, il ne peut pas se rendre à l'adresse IP publique de ma box car pour lui l'adresse de ma box c'est 192.168.x.x .

    J’utilise socket.io, et pour la connexion c'est la méthode io.connect(adresse où envoyer des requêtes).

    Depuis l'extérieur ça fonctionne car la socket se connecte bien, mais depuis l'intérieur de mon réseau, io.connect(adresse où envoyer des requêtes) ne marche plus!
    Il faudrait par exemple que je vérifie si la connexion s'est bien effectuée et sinon lui indiquer de se connecter à l'adresse 192.168.x.x .

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    il ne peut pas se rendre à l'adresse IP publique de ma box
    ah bon?!? ton client en local, si tu lui demande de passer par l'ip publique, bha il va être traité par le routeur comme n’importe quel client externe
    ton problème est ailleurs.


    que je vérifie si la connexion s'est bien effectuée
    http://socket.io/docs/logging-and-debugging/#

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    ah bon?!? ton client en local, si tu lui demande de passer par l'ip publique, bha il va être traité par le routeur comme n’importe quel client externe
    ton problème est ailleurs.
    Hum oui je ne voulais pas dire ça, en fait il faut prendre en considération la seconde partie avec socket seulement pardon.

    Merci bien, par contre je ne trouve toujours pas de solution quand au refus de connexion des sockets depuis mon réseau.
    Mon application fonctionne en dehors de mon réseau local, mais quand je veux accéder à mon application depuis ma machine, la page HTML s'affiche, mais la connexion avec socketIO bloque, et le reste du javascript n'est pas lu, avec: "ReferenceError: io is not defined" dans la console. Voici le début de mon code pour illustrer la connexion côté client et aussi mettre en avant que ce n'est pas une erreur de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
            <script src="/socket.io/socket.io.js"></script>
            <script>
    		jQuery('#dial').append("Test");
                   var socket = io.connect('IP:PORT');
                var pseudo = prompt('Comment ça va?');
               ...
         </script>
    Le jQuery devrait prendre effet immédiatement en affichant le message, or ici ce n'est pas le cas: il y a un temps d'attente ( tentative de connexion de la socket) puis la console affiche le message d'erreur et le message jQuery en même temps, je suppose que c'est dû au fonctionnement de nodeJS. Le code qui suit n'est plus lu, le prompt ne s'affiche pas. Je ne comprends donc pas : "ReferenceError: io is not defined", vu que cela fonctionne ailleurs, pourquoi j'obtiens ce message selon vous svp?

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Avançons pas à pas si tu le veux bien

    Peux tu m'assurer que le fichier socket.io.js est bien récupéré par le navigateur, càd que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="/socket.io/socket.io.js"></script>
    amène le navigateur à résoudre cette url "http://ip_public_ou_domaine:port_d'ecoute/socket.io/socket.io.js" qui doit te retourner un beau statut 200 ?

    ps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var socket = io.connect('IP:PORT');
    coté client un simple var socket = io(); suffit

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    Avançons pas à pas si tu le veux bien

    Peux tu m'assurer que le fichier socket.io.js est bien récupéré par le navigateur, càd que
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script src="/socket.io/socket.io.js"></script>
    amène le navigateur à résoudre cette url "http://ip_public_ou_domaine:port_d'ecoute/socket.io/socket.io.js" qui doit te retourner un beau statut 200 ?
    Quand je rentre cette URL, j'obtiens une page remplie de code correspondant au code de socket IO je pense, et au niveau du résultat de la requête j'obtiens avec un debugger: Nom : Sans titre.png
Affichages : 1649
Taille : 7,9 Ko

    coté client un simple var socket = io(); suffit
    Oui j'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var socket = io.connect();
    .

    Le truc c'est que je viens de tester avec différents amis, et ça marche : ils se sont connectés et ont pu dialoguer, depuis trois endroits différents! Du coup mon problème reste le même, je suis même passé voir un ancien professeur en réseaux qui ne connaissait pas de solution ( après c'était un passage rapide).
    J'avais testé différentes notations pour inclure/requérir socketIO au cas où mais quoique je fasse j'ai toujours le même souci : io dans mon code au début de la page HTML n'est pas reconnu depuis mon réseau local.
    Je pense peut être que c'est parce que mon pc est mon serveur et il y aurait des soucis en faisant passer une connexion avec socketIO depuis une machine du réseau local, par mon routeur, vers mon serveur sur réseau local, il y aurait des conflits?
    On m'a dit de configurer un fichier host ce matin également ce que j'ai essayé de faire mais sans résultat, et sans savoir si c'est correctement fait pour ce que j'attends.
    Il reste également une piste : l'interface écoutée [eth0 eth1 eth2], mais je ne me suis pas penché sur ce cas encore, je ne comprends pas vraiment.

    Résumé:
    Problème : socketIO marche depuis l'extérieur et pas l'intérieur de mon réseau.
    Solutions à tester : interfaces(?), fichiers de configuration pour héberger un serveur, conflits réseaux, et comme tu me le suggère compréhension lente mais sûre du souci

    Merci en tout cas de te pencher une fois de plus sur mon souci

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Solutions à tester : interfaces(?), fichiers de configuration pour héberger un serveur, conflits réseaux
    ton "referenceerror io is not defined" indique juste qu'au moment de l'interpretation par le navigateur de la ligne "var socket = io();" soit le fichier socket.io.js n'est pas chargé , soit le contenu n'est pas celui attendu.

    Autrement dit, la définition de io ce trouve dans socket.io.js, si pas de socket.io.js => pas de io() ...

    donc

    Quand je rentre cette URL, j'obtiens une page remplie de code correspondant au code de socket IO
    tu me confirme que tu as bien dans le socket.io.js récupéré qqchose qui commence par ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.io = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&amp;amp;amp;amp;amp;amp;require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&amp;amp;amp;amp;amp;amp;require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
     
    /**
     * Module dependencies.
     */
     
    var url = _dereq_('./url');
    var parser = _dereq_('socket.io-parser');
    var Manager = _dereq_('./manager');
    var debug = _dereq_('debug')('socket.io-client');
    si c'est le cas, essaye de mettre ton link "<script src="/socket.io/socket.io.js"></script>" tout en haut de ton fichier, au moins avant le link vers jquery.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    Oui j'obtiens bien ce code, et non ça ne marche pas ^^

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    et non ça ne marche pas
    ca ne marche pas si tu met
    <script src="/socket.io/socket.io.js"></script>" tout en haut de ton fichier, au moins avant le link vers jquery.
    c'est bien cela?

    je suppose que tu as essayé avec plusieurs navigateurs?!

    il serait intéressant de tester avec l'exemple de chat de socket.io https://github.com/socketio/socket.i.../examples/chat en changeant juste ip et port dans index.js afin de cerner le probléme.

    pour finir, peux-tu remettre le code actuel de ton client et serveur?

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 38
    Par défaut
    c'est bien cela?
    Oui c'est bien cela mais si je mets mon IP privée ça marche, j'aurais aimé pouvoir mettre mon IP publique partout.

    je suppose que tu as essayé avec plusieurs navigateurs?!
    Non mais je ne pense pas que ça joue.

    pour finir, peux-tu remettre le code actuel de ton client et serveur?
    J'ai cité dans les posts #5 et #10 ce code un peu simplifié ^^

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Non mais je ne pense pas que ça joue.
    En est tu assez sur pour risquer de passer à coté d'un dés éléments du problèmes

    J'ai cité dans les posts #5 et #10 ce code un peu simplifié ^^
    Certes mais le but étant de faire un point sur l'état actuel du code, notamment l’ordonnancement des instructions cotés client.
    Si ce n'est pas évident de trouver la solution pour toi, imagine pour les autres à travers le forum qui ne peuvent pas manipuler en direct... d'où l'importance de la précision dans les réponses et l’intérêt de faire un point sur le code.

    Peux tu aussi nous donner les logs coté client avec le mode debug de socket activé. cela doit donner qqchose comme ceci.

    Nom : socket.jpg
Affichages : 1707
Taille : 86,4 Ko

Discussions similaires

  1. [WD15] Accéder à une application via Internet
    Par aurabarth dans le forum WinDev
    Réponses: 5
    Dernier message: 18/10/2012, 08h22
  2. Réponses: 1
    Dernier message: 22/09/2009, 13h26
  3. accéder à une application
    Par aminobobo dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 31/08/2008, 14h23
  4. accdéer à une application gwt par pda, smartphone, etc.
    Par aurelientp dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 10/06/2008, 18h11
  5. touche pour accéder à une application : hook system?
    Par Fox_magic dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/01/2003, 00h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo