2017-01-31 1 views
2

연결 한 모든 사용자를 표시하려고합니다. 처음으로 이벤트에 연결된 유일한 사용자가 표시됩니다. 그러나 새로운 닉네임으로 새 페이지 을로드하면 사용자는 첫 번째 페이지에서 업데이트되지 않고 두 번째 페이지는 완벽하게 업데이트됩니다. 하지만 세 번째 페이지를로드하는 경우, 세 번째 페이지는 완전히 으로 업데이트되고 다른 페이지는 업데이트되지 않습니다. 로드 된 마지막 페이지에만 연결된 모든 사용자가 표시됩니다.socket.io를 사용하여 사용자를 업데이트 할 수 없습니다.

Image of my problem

서버에

var app = require('express')(); 
var express = require('express'); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var nicks = new Array(); 

app.use(express.static('./public')); 

io.sockets.on('connection', function(socket) { 

    socket.on('nick', function(data) { 

    var nick = data.nick; 
     nicks.push(nick); 

      socket.emit('users', { 
      nicks: nicks 
     }); 
    }) 

}); 



app.get('/', function(req, res) { 
    res.sendFile(__dirname + '/index.html'); 
}); 


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

CLIENT

$(document).ready(function() { 

    var socket = io(); 
    var nickname; 
    var nicks = new Array(); 

    nickname = prompt('Write your name:'); 

    $("#button").on("click", function(event) { 

     var nick = nickname; 
     socket.emit('nick', { 
      nick: nick 
     }); 
    }); 


    socket.on('users', function(data) { 

     nicks = data.nicks; 

     for (var i = 0; i < nicks.length; i++) { 

      $("#users_connected").append('<li>' + nicks[i] + '</li>'); 
     } 
    }); 




}); 

답변

3

문제는 당신이 사용하고 있다는 점이다 문서에서 socket.emit() :

  • 문자열 이름으로 식별되는 소켓에 이벤트를 내 보냅니다.

users 이벤트를받는 유일한 사람이 닉 이벤트를 보내는 사람이라는 것을 의미합니다.

전년 동기 대비는 문서에서 Server.emit() 을 사용하고자합니다

  • 연결된 모든 클라이언트에 이벤트를 발행합니다. 다음 두

    var io = require('socket.io')(); 
        io.sockets.emit('an event sent to all connected clients'); 
        io.emit('an event sent to all connected clients'); 
    

그 방법은 현재 사용자에 대한 모든 conections를 통보 할 수 있지만 대부분은 당신이 명확 그나마 어떻게 든 이미 추가 된 사용자를 무시하면 현재 스키마에 실패 할 것입니다.

"신입 회원"이라는 두 가지 사건을 가지고 모든 회원이 아닌 모든 회원에게 자료를 보내고 회원 자격을 제거하고 다시 인쇄하거나 유효성을 검사하는 것을 피하기 위해 "disconected"를 선호합니다.

좀 더 사용하려면 네임 스페이스를 확인해야합니다. 특정 연결 그룹에 이벤트 보내기

을 확인)

http://socket.io/docs/server-api/

+0

작품!, 난 당신의 대답을 받아, 너무 많은 형제가 당신에게 감사합니다! 나는 당신의 도움을 대단히 감사합니다 :) –

관련 문제