2017-10-12 38 views
0

クライアントがストリームをもう聞かないときはいつでも、サーバにキャッチする必要があります。grpcクライアントの切断時に通知を受け取ることはできますか?

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...') }) 
} 

私が意図したことは、クライアントが接続し、イベントの種類を指定し、イベントのストリームを受信するということでした。 Ctrl+Cが接続され、 "client left ..."がコンソールに記録されるまで、接続はハングします。

クライアントコードは次のようになります:予想通り

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

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

すべての作業、call.on('end')のための唯一のコールバックは発火することはありません。私はgRPC Tutorialからこのための基礎を得ましたが、私は何かが欠けているに違いありません。

答えて

0

クライアントが突然サーバーと通信せずに突然切断されると、最終的にサーバー上で「キャンセル」イベントが発生するはずです。それはあなたが聞くべきものです。このような場合には、書き込みストリームを停止する方法をお勧めします。

単式のリクエスト/ストリーミングの応答方法のようです。つまり、サーバー側では書き込み可能なストリームがあり、書き込み可能なストリームには「終了」イベントがありません。これは、読み込み可能ストリーム上のイベントで、読み込みが完了したことを示します。

関連する問題