2011-05-03 5 views
2

Une fonction simple qui sert une chaîne JSON à partir d'un résultat de base de données est diffusée au client à l'aide de socket.broadcast(). Ce que je souhaite faire, c'est mettre à jour le côté client lorsque la valeur change. Actuellement, la fonction de diffusion utilise setTimeout pour diffuser en continu toutes les secondes. En regardant les logs de demande dans Firebug, il y a une réponse GET continue, ce que je ne pense pas être une bonne chose ...Diffusion avec socket.io?

Vous vous demandez simplement quelle est la meilleure pratique pour l'utilisation de sockets? Est-ce que ces demandes vont tuer quelque chose? Une solution consisterait-elle à comparer des horodatages, ou quelque chose de similaire, pour éviter d'envoyer inutilement des requêtes?

//server-side 
function checkData() { 
    client.query('SELECT * FROM data', function selectCb(err, data) { 
     socket.broadcast(processData(data)); 
     setTimeout(checkData, 1000); 
    }); 
} 

//client-side 
socket.on('message', function(data) { 
    $('#container').html(JSON.stringify(JSON.parse(data), null)); 
}); 

//sample data 
[{ 
    "type":"Statistic1", 
    "value":65.2, 
    "timestamp":"2011-04-29T16:22:39.000Z" 
},{ 
    "type":"Statistic2", 
    "value":18.6, 
    "timestamp":"2011-04-29T16:22:39.000Z" 
}] 

Merci pour votre aide!

Répondre

0

Cela dépend des données que vous envoyez. L'un des avantages de sockets est que vous pouvez choisir quand envoyer des données aux clients. Sauvegardez certaines demandes get et ne diffusez que des données lorsque vous avez quelque chose de nouveau à envoyer.

+0

J'ai mis à jour mon post ci-dessus avec un échantillon des données envoyées. Comment puis-je sauvegarder les demandes get, afin de savoir quand envoyer des données considérées comme nouvelles? – crawf

+0

Sur le serveur, conservez l'horodatage du dernier élément que vous avez envoyé. Au lieu de faire un select * chaque seconde, vous pouvez vous connecter à tout ce qui met à jour la base de données Ou vous pouvez faire une stratégie similaire avec memcsche – mcotton