Bonjour,

Voila je rencontre un petit problème dans ma réflexion sur un projet autour de nodejs et d'un webservice

Mon projet se concentre sur la gestion des evenements d'un centre d'appels téléphonique.
J'ai besoin de pouvoir afficher les status de chaque conseiller en direct sur une page web.
Je me suis donc pencher sur ce qui rapproche le plus pour moi d'une technologie permettant de faire du temps réel : NodeJS.

J'ai créé mon serveur NodeJS, et j'utilise le module "heartbeats" qui permet de creer des evenements à intervalle régulier.
Ainsi toutes les secondes, je renvois les données vers la page du client. Cependant, pour le moment je n'ai pas encore lier les données de mon webservice.

Comment faire pour que NodeJS récupère les données du webservice toutes les secondes et mettent a jour la page en direct sans que cela ne soit trop lourd pour le serveur ?

Si vous avez des methodes plus simples a utiliser je suis preneur. :)

merci d'avance pour votre aide

5 réponses


Je dirais à première vue, socket. Pour le temps réel c'est le mieux

@Defy, j'utilise bien le package socket.io pour le temps réel, mais ma problematique réside plutot dans le fait de savoir comment récuperer le webservice sans freeze la page le temps que la lecture du webservice se fasse ?

Faudrait il que je lance une lecture du webservice toutes chaque seconde et que j'attende la fin de la lecture pour remettre a jour la page ? Je ne pense pas que la lecture du webservice prenne moins d'une seconde. et donc la mise a jour va freezer pendant la lecture, non ?

Avec de l'ajax ca ne pose pas de problème vue que le coté async de js te permet de ne pas freeze l'interface.

@Defy, donc pour que je comprenne bien, tu lancerais une requete sur le webservice chaque seconde depuis le serveur nodejs et ensuite tu "emit" l'update vers la page puis tu mets a jour les infos en fonction des datas envoyés ?

UPDATE
Alors je viens de tester un moyen qui semble fonctionner :)
voici ce que je fais

io.on('connection', (socket) => {
    heart.createEvent(1, function(count, last){
        socket.emit('request', moment().unix())
        let users = require('fs').readFile(file, 'utf8', (err,data)=>{
            socket.emit('update', data)
        })   
    })
})

Est ce que d'après toi, cela semble etre une bonne solution ?

Bien sur pour le moment je ne le teste qu'avec la lecture d'un fichier json cependant pour le moment il ne m'est pas possible de tester le webservice directement car je n'y ai pas encore acces.

Oui ca m'as l'air corecte, apres je suis pas un expert non plus socket, je n'ai peut etre pas assez de recul pour te donner une réponse claire.