当grpc客户端断开连接时,我可以收到通知吗?

时间:2017-10-12 03:05:02

标签: node.js 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得到了基础知识,但我必须遗漏一些东西。

1 个答案:

答案 0 :(得分:0)

客户端突然断开连接而没有正确地将其与服务器通信,最终应该在服务器上触发“已取消”事件。那是你应该听的。我还建议在发生这种情况时停止写入流。

您拥有的方法看起来像一元请求/流式响应方法。这意味着在服务器端,您有一个Writable流,而Writable流没有“end”事件。这是一个可读流的事件,表示您已完成阅读。