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 :

Mon serveur nodejs se réinitialise


Sujet :

NodeJS

  1. #1
    Candidat au Club
    Mon serveur nodejs se réinitialise
    Bonjour,
    j'ai un souci en Nodejs ,j'aimerais que quelqu'un puisse m'aider Merci bien.J'ai fait un chat en Nodejs pour m'initier.Mon problème est que :
    j'ouvre par exemple trois fenêtres du navigateur à l'adresse du serveur : localhsot:8080 et je fais connecter mes utlisateurs l'un après l'autre.
    Quand le deuxieme utilisateur se connecte ,le deuxième utilisateur est au courant du premier utilisateur ,puis le troisième est au courant du deuxième et du premier.jusque là tout va bien car j'utilise socket.broadcast.emit. Mais en ouvrant à nouveau une nouvelle fenêtre du navigateur à l'adresse du serveur :localhost:8080 pour connecter un quatrième utilisateur , alors ce dernier n'est plus au courant des utilisateurs précédemment connectés.Tandis que les précédents utilisateurs sont bel et bien au courant du quatrieme utilisateur connecté.C'est comme si le serveur se réinitialise en considérant le quatrième utilisateur comme le premier utilisateur connecté.J'ai pensé que c'est parce que je n'ai pas utlisé les sessions.Mais j'en ai utilisé et toujours rien ne marche.Si vous pouviez me guider merci.

  2. #2
    Expert éminent sénior
    IMHO t'as un bug.

    Sans ton code ça va être chaud de t'aider.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Candidat au Club
    Merci pour ta réponse Marco46 .Voici mon code si tu peux me dire le bug que j'ai merci.

    // app.js
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    var app = require('express')(),
      server  = require("http").createServer(app),
      io = require("socket.io")(server),
      session = require("express-session")({
        secret: "my-secret",
        resave: true,
        saveUninitialized: true
      }),
      sharedsession = require("express-socket.io-session");
      var clients= {};
      var messages = [];
     
      app.get('/', function(req, res) {
        res.sendFile(__dirname + '/public/index.html');
    });
     
    //io.use(sharedsession(session));
    io.use(sharedsession(session, {
        autoSave:true
    }));
     
    io.on("connection", function(socket) {
        // Accept a login event with user's data
        console.log('Un client est connecté !');
         socket.on('add-user', function(data){
            socket.handshake.session.data = data;
            socket.handshake.session.save();
            clients[data.username] = {
          "socket": socket.id
        };
        var user =socket.handshake.session.data.username;
        console.log("unnnn"+user);
        socket.broadcast.emit('allo',user);
     
        });
        socket.on("logout", function(userdata) {
            if (socket.handshake.session.userdata) {
                delete socket.handshake.session.userdata;
                socket.handshake.session.save();
            }
        }); 
        socket.on('private-message', function(data){
        console.log("Sending: " + data.message + " to " + data.usernames);
        if (clients[data.usernames]){
           console.log("leeeee" +socket.handshake.session.data.username);
           //console.log(typeof data);
           var x = [data];
           x.push(socket.handshake.session.data.username);
           console.log(x);
          io.sockets.connected[clients[data.usernames].socket].emit("add-message",x);
        } else {
          console.log("User does not exist: " + data.usernames); 
        }
      });       
    });
     
    server.listen(8080);



    // index.html
    Code html :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Socket.io</title>
             <link rel="stylesheet" type="text/css" href="https://bootswatch.com/4/lux/bootstrap.min.css">
             <link rel="stylesheet" style="text/css" href="page.css" />
             <title>Bootstrap Example</title>
     
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
        </head>
     
        <body>
     
    </div>
       <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
      <a class="navbar-brand" href="#">Navbar</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
     
      <div class="collapse navbar-collapse" id="navbarColor02">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item active">
            <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Features</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Pricing</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">About</a>
          </li>
        </ul>
        <form class="form-inline my-2 my-lg-0">
          <input class="form-control mr-sm-2" type="text" placeholder="Search">
          <button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button>
        </form>
      </div>
     
    </nav>
    <div class="container">
      <div class="row">
        <div class="col-sm-4" >
     
        <div id="texto"></div>
     </div>
        <div class="col-sm-4" id="tchat">
          <form action="" id="loginform">
           <input type="text" name="iduser" id="iduser"/>
           <input type="submit" value="Join" id="join"/>
           </form>
             <div style="position:absolute; background-color: purple;">
             <form action="#" id="chatforms">
             <label>TO: </label><br />
             <input type=text name="username" id="username" />
             <div style="border:1px solid blue; background-color: silver; color: black; width: 150px;border-radius: 5px;" id="messages" ></div>
     
     
             <label></label>
             <input type="text" size="25" id="message" placeholder="Enter message" name="email">
             <button type="submit" class="btn btn-success" >Send <span class="badge"></span></button>
     
             </form>
             </div>
     
        </div>
        <div class="col-sm-4">
          <h3>Column 3</h3>        
          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
          <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
        </div>
      </div>
     <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
     
            <script src="/socket.io/socket.io.js"></script>
            <script>
            var usercount = 1;
             $('#chatforms').hide(); // à l'ouverture de la page je cache le formulaire d'envoie de message
             $('#texto').hide(); // à l'ouverture de la page je cache les utilisateurs connectés
                var socket = io.connect('http://localhost:8080');
                var userid;
                socket.on('add-message', function(data) {
                    
                    insereMessage(data[1],data[0].message);
                    $('#chatforms').show();
                })
             $('#loginform').submit(function(event){
                userid=$('#iduser').val();
                if(userid == '')
                {
                  alert("veuillez donner votre pseudo");
                }
                else 
                {
                 $('#chatforms').hide(); 
                 $('#texto').show();
                
                $( "#iduser" ).prop( "disabled", true );
                $( "#join" ).prop( "disabled", true );
                 socket.emit("add-user", {username: userid});
                return false;
                }});
     
               $('#chatforms').submit(function(event){
                var messages =$('#message').val();
                var usernames=$('#username').val();
                alert("utilisateur est :" +usernames+ "messages est :"+messages);
                insereMessage(userid,messages);
                socket.emit("private-message", {usernames: usernames, message: messages});
                return false;
                
                });
     
                function insereMessage(pseudo, message)
                {
                  
              var montext = document.getElementById("messages");
              montext.innerHTML += "<p><strong style='color:blue;'>"+ pseudo+":</strong> "+message+"</p>";
                }
                function inserUser(pseudo)
                {
                   
                document.getElementById('texto').innerHTML += "<a href='#'id='us"+usercount+"'>"+pseudo+"</a> <br>";
                usercount++;
                    
                }
               socket.on('allo',function(data){
               inserUser(data);
                })
     
               $(document).on("click","a", function () {
                 var clickedBtnID = $(this).attr('id'); // or var clickedBtnID = this.id
                 alert(clickedBtnID);
                var valeur = document.getElementById(clickedBtnID).innerHTML;
                var unId = $("#us1").val();
                alert(unId+"fffff");
                alert(valeur);
                document.getElementById("username").value=valeur;
                $("#chatforms").show();
            
        })
         </script>
     
        </body>
     
    </html>

  4. #4
    Candidat au Club
    RESOLU
    Merci pour votre reponse l'erreur venait de moi j'ai pu corriger

###raw>template_hook.ano_emploi###