2017-10-12 4 views
0

Je dois attraper dans le serveur chaque fois qu'un client n'écoute plus le flux. Je pensais que ce serait faire:Puis-je être averti lorsque le client grpc se déconnecte?

function getEvents(call) { 
    const { type } = call.request 
    EVENTS 
    .filter((e) => e.type === type) 
    .foreach((event) => call.write(event)) 

    call.on('end',() => { console.log('client left...') }) 
} 

Ce que je voulais est qu'un client se connecter, spécifiez un type d'événement, et recevoir un flux d'événements. La connexion serait alors suspendue jusqu'à Ctrl+C et "client laissé ..." serait enregistré dans la console.

code client serait comme:

function main() { 
    const client = 
    new EventStore('localhost:50051', grpc.credentials.createInsecure()) 

    const call = client.getEvents({ type: 'Done' }) 
    call.on('data', (event) => console.log(event)) 
} 

Tout fonctionne comme prévu, seul le rappel pour call.on('end') ne se déclenche. J'ai obtenu les bases pour cela à partir du gRPC Tutorial mais il me manque quelque chose.

Répondre

0

Un client se déconnectant brusquement, sans communiquer correctement cela au serveur, devrait éventuellement déclencher un événement "annulé" sur le serveur. C'est ce que vous devriez écouter. Je recommande également d'avoir un moyen d'arrêter votre flux d'écriture lorsque cela se produit.

La méthode que vous avez ressemble à une méthode de réponse unaire/requête unaire. Cela signifie que sur le serveur, vous avez un flux Writable et que les flux Writable n'ont pas d'événements "end". C'est un événement sur un flux lisible, pour indiquer que vous avez fini de lire.