2015-09-20 2 views
1

Я хочу обновить массив на сервере и передать его всем клиентам. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужен параметр клиента для трансляции. На сервере:Socket.io serverside broadcast

var socket = io.listen(8000); 
    var plateaus = []; 

    setInterval(function() { 
     plateaus.push('new data'); 
     -- send the updated array to all clients -- 
    }, 1000); 

    socket.sockets.on("connection", setEventListeners); 

    function setEventListeners(client) 
     // loadExistingPlayer(client); <- normally I use the client param 
    } 

Как транслировать обновленный массив? Большое спасибо!

ответ

0

После того, как вы подключите своего клиента, вы бы только emit событие с вашего сервера, и ваш клиент мог прослушать это событие с on(event, cb)?

От Docs: http://socket.io/docs/

Сервер:

var io = require('socket.io')(server); 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

Клиент:

var socket = io('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
+0

да ... но как вызвать событие в интервале серверов –

+0

Вы можете поместить излучатель в вашем setInterval. – tells

+0

, но мне нужен сокет. параметр .. –

1

ответ на свой вопрос (надеюсь, что поможет кто-нибудь в будущем).

Вы можете сохранить параметры клиента в массиве и доступ к нему в любое время:

var socket = io.listen(8000); 
var plateaus = []; 
var clients = [] 

setInterval(function() { 
    plateaus.push('new data'); 
    for(var i = 0; i < clients.length; i++){ 
     clients[i].emit('updata all clients', plateaus) 
    } 
}, 1000); 

socket.sockets.on("connection", setEventListeners); 

function setEventListeners(client) 
    console.log('new client'); 
    clients.push(client); 
}