2016-01-25 2 views
1

Могу ли я узнать, какая часть кода, которая возникает после отсоединения клиента и повторного подключения сообщения чата, больше не отображается в браузере клиента, однако чат по-прежнему испускает сервер, а другой пользователь будет иметь возможность видеть сообщение, сам исходный отправитель не сможет получить сообщение. Интересно, это проблема сокета или javascript?Socket IO не получает испускаемые данные после повторного подключения

Заранее спасибо и извините за мой плохой английский :)

Разъем IO Version 1.3.7

Примечания: Я интегрированием чат с Laravel так не будет использовать любые nodejs маршрутизации здесь, я предполагаю, что это привычка вызывает никаких проблем для меня прямо так чат может нормально функционировать ... только проблема выше я в настоящее время сталкивается в настоящее время

//server.js 
var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

io.on('connection', function(socket){ 
    //console.log('a user connected: ' + socket.id); 
    socket.on('disconnect', function(){ 
     console.log(socket.name + ' has disconnected from the chat.' + socket.id); 
     io.emit('user', io.sockets.sockets.length); 
     io.emit('chat message', socket.name + ' has disconnected from the chat.'); 
    }); 
    socket.on('join', function (name) { 
     socket.name = name; 
     console.log(socket.name + ' joined the chat.'+ socket.id); 
     io.emit('user', io.sockets.sockets.length); 
     io.emit('chat message', socket.name + ' joined the chat.'); 
    }); 
    socket.on('chat message', function(msg){ 
     io.emit('chat message', msg); 
     console.log(msg); 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

«»

//Client code here 
<div class="board" style="position: absolute;right:40%;width:350px;height:500px;" id="liveQuickAskDesk"> 

     <h2 class="timberGradient">Live Quick Ask Desk</h2> 
     <div id="innerQuickAskDesk"> 
      <span id="total_user"></span> staff online currently 
      <button type="button" id="disconnect" class="btn btn-danger">Offline</button> 
      <div class="col-lg-12" id="messagewindow" style="position: absolute;height:330px;overflow: auto;"> 
       <span id="messages"></span> 
      </div> 
      <div class="col-lg-12"> 
       <form style="position: absolute;margin:110% 0 0 0;width:320px;"> 
        <div class="form-group"> 
         <label>Message:</label> 
         <input type="text" class="form-control" id="m"> 
        </div> 
       </form> 
      </div> 
     </div> 

     <div class="col-lg-12 center-block" id="connect_div"> 
      <button type="button" id="connect" class="btn btn-primary center-block" style="margin-top: 50%;">Online</button> 
     </div> 

    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script> 
    <script> 

     $("#connect_div").hide(); 
     var socket = io.connect('http://localhost:3000'); 
     var name = "<?php echo $user_name ?>"; 

     $('#disconnect').click(function(){ 
      socket.disconnect(); 
      $("#liveQuickAskDesk").css('background', 'rgba(0,0,0,0.1)'); 
      $("#innerQuickAskDesk").hide(); 
      $("#connect_div").show(); 
      $('#messages').html(""); 
     }); 
     $('#connect').click(function(){ 
      socket = io.connect('http://localhost:3000',{'forceNew':true}); 
      socket.on('connect', function(msg){ 
       socket.emit('join', name); 
       console.log("client reconnect to the server"); 
      }); 
      $("#liveQuickAskDesk").css('background', 'rgba(0,0,0,0)'); 
      $("#connect_div").hide(); 
      $("#innerQuickAskDesk").show(); 

     }); 

     socket.on('connect', function(msg){ 
      socket.emit('join', name); 
      console.log("client join the server"); 
     }); 
     socket.on("disconnect", function(){ 
      console.log("client disconnected from server"); 
     }); 

     $('form').submit(function(){ 
     $('#messagewindow').animate({ scrollTop:$('#messagewindow').prop('scrollHeight')}, 10); 
     socket.emit('chat message', "Staff "+name+": "+$('#m').val()); 
     $('#m').val(''); 
     return false; 
     }); 

     socket.on('user', function(msg){ 
     $('#total_user').html(msg); 
     }); 
     socket.on('chat message', function(msg){ 
     $('#messages').append($('<p>').text(msg)); 
     }); 

    </script> 

</div> 
+0

Сообщения не хранятся нигде, не так ли? – Rayon

+0

Да, сообщение не хранится нигде, просто обычная отправка и получение client-> server-> client – Secret

+0

Для этого вам понадобится БД. У вас могут быть глобальные переменные для хранения пользовательских сообщений тоже. – Rayon

ответ

2

Вы теряете свои слушатель, когда отключить и вновь подключить, так держать ваши слушатель внутри функции и вызывая его каждый раз при подключении должно быть в порядке.

socket = io.connect('http://localhost:3000',{'forceNew':true}); 
setevts(); 

function setevts() { 

    socket.on('connect', function(msg){ 
     socket.emit('join', name); 
     console.log("client join the server"); 
    }); 

    socket.on("disconnect", function(){ 
     console.log("client disconnected from server"); 
    }); 

    socket.on('user', function(msg){ 
    $('#total_user').html(msg); 
    }); 

    socket.on('chat message', function(msg){ 
    $('#messages').append($('<p>').text(msg)); 
    }); 

} 
+0

О, это работает сейчас, спасибо за ваш ответ :) – Secret

Смежные вопросы