2017-10-12 192 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,並且「客戶端左...」將被記錄到控制檯。

客戶端代碼將是這樣的:

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

客戶端突然斷開連接,但沒有正確地與服務器通信,客戶端最終會在服務器上觸發「取消」事件。這是你應該聽的。我還建議在發生這種情況時採取一些停止寫入流的方法。

您看起來像一元請求/流響應方法的方法。這意味着在服務器端,您有一個Writable流,而Writable流沒有「結束」事件。這是可讀流上的事件,表示您已完成閱讀。

相關問題