2013-05-02 3 views
0

На данный момент у меня есть сервер веб-сервера, который генерирует uuid для каждого подключенного к нему подключения и передает его на клиент, а на стороне клиента я обновляю простой список со всеми соединениями , Я хотел бы видеть список оригинального connaction в обновлении, позвольте мне пояснить, что я имею в виду:socket.io обновить список подключенных клиентов

  1. открыть вкладку - первый клиент подключается и я вижу свою UUID на списке
  2. открыть новую вкладку , подключитесь к websocket, я вижу идентификатор ID и новый ID
  3. Теперь, когда я вернусь на вкладку 1, я не вижу оба соединения, только первое, что было там. Как обновить этот список таким образом, чтобы при подключении к websocket этот список uuid обновлен для всех подключенных клиентов .

Мой код на данный момент выглядит следующим образом:

сервер:

var http = require("http"), io = require("socket.io"), uuid = require ("node-uuid"); 
var connectedPlayers = new Array(); 
var server = http.createServer(function(req, res) { 
    // Send HTML headers and message 
    res.writeHead(200,{ "Content-Type": "text/html" }); 
    res.end("<h1>Server is ready & listening</h1>"); 
}); 
server.listen(1222, "1.1.1.1"); 

var socket = io.listen(server); 
socket.set('log level', 0); 

socket.on("connection", function(client) { 
    client.on("connection", function(){ 
    console.log("Client connected."); 
    }); 

    client.on("disconnect",function(client){ 
    //connected--; 
    console.log("Client disconnected."); 
    }); 

    client.userid = uuid(); 
    console.log(client.userid); 
    connectedPlayers.push(client.userid); 
    client.emit("onconnected", {playersId: connectedPlayers}); 
}); 

клиент:

var socket = io.connect("1.1.1.1:1222"); 

     console.log(socket); 
     socket.on("connect",function() { 
      console.log("Client has connected to the server"); 
     }); 

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

     socket.on("error", function(message) { 
      console.log("It is not possible to connect to the server: " + message); 
     }); 

     socket.on("onconnected", function(data) { 
      for (var i = 0; i < data.playersId.length; i++) 
       $("#players").append("<li>" + data.playersId[i] + "</li>"); 
     }); 

(и, конечно же: <ul id="players"></ul>)

+0

change client.emit to socket.emit или, может быть, broadcast() – dandavis

+0

Я изменил на socket.emit(), но мой клиент, похоже, не забирает anyt hing, функция «onconnected» никогда не вызывается на стороне клиента. – Tamas

ответ

1

Вам нужно для извлечения события с помощью 'io.sockets.em это ', а не' client.emit '.

Измените последнюю строку в сценарии сервера от:

client.emit("onconnected", {playersId: connectedPlayers}); 

к:

socket.sockets.emit("onconnected", {playersId: connectedPlayers}); 

Для добавления значения в списке, мой путь выглядит следующим образом:

socket.on("onconnected", function(data) { 
    var tmp = document.getElementById("players"); 
    for (var i in data.playersId) 
     tmp.innerHTML += "<li>" + data.playersId[i] + "</li>"; 
}); 
+0

Я думаю, что мне что-то не хватает: index.js: 26 io.sockets.emit («onconnected», {playersId: connectedPlayers});^TypeError: Невозможно вызвать метод «emit» undefined – Tamas

+0

Попробуйте изменить socket.on («connection», function (client) {'for'io.sockets.on («connection», function (client) {' – Riwels

+0

Тогда я get: Не удается вызвать метод 'on' из неопределенного – Tamas

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