Обновление всех клиентов с помощью Socket.io?



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



Серверный JavaScript-Код:



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



var clients = 0;
io.sockets.on('connection', function (socket) {
++clients;
socket.emit('users_count', clients);
socket.on('disconnect', function () {
--clients;
});
});


Клиентский JavaScript:



var socket = io.connect('http://localhost');

socket.on('connect', function(){
socket.on('users_count', function(data){
$('#client_count').text(data);
console.log("Connection");
});
});
571   3  

3 ответов:

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

// socket is the *current* socket of the client that just connected
socket.emit('users_count', clients); 

вместо этого вы хотите излучать в все розетки

io.sockets.emit('users_count', clients);

кроме того, вы можете использовать функцию широковещания, которая отправляет сообщение всем, кроме сокета, который его запускает:

socket.broadcast.emit('users_count', clients);

Я обнаружил, что с помощью гнездо.транслировать.выделяют() будет транслироваться только на текущее "соединение", но io.розетки.испускают будет транслироваться для всех клиентов. здесь сервер прослушивает "два соединения", которые являются точно 2 сокета пространства имен

io.of('/namespace').on('connection', function(){
    socket.broadcast.emit("hello");
});
io.of('/other namespace').on('connection',function(){/*...*/});

Я пытаюсь использовать io.розетки.выделяют() в одном пространстве имен, но он был получен клиентом в другом пространстве имен. однако гнездо.транслировать.выделяют() будет просто транслировать текущее пространство имен гнездо.

по состоянию на socket.io версия 0.9, "emit" больше не работал для меня, и я использую "send"

вот что я делаю:

На Стороне Сервера:

var num_of_clients = io.sockets.clients().length;
io.sockets.send(num_of_clients);

На Стороне Клиента:

ws = io.connect...
ws.on('message', function(data)
{
var sampleAttributes = fullData.split(',');
if (sampleAttributes[0]=="NumberOfClients")
        {
            console.log("number of connected clients = "+sampleAttributes[1]);
        }
});

Comments

    Ничего не найдено.