Обновление всех клиентов с помощью 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");
});
});
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