当 grpc 客户端断开连接时,我可以得到通知吗?
Can I get notified when the grpc client disconnects?
只要客户端不再收听流,我就需要在服务器中捕获。我认为这样做可以:
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 获得了这方面的基础知识,但我一定遗漏了一些东西。
客户端突然断开连接,而没有正确地与服务器通信,最终应该在服务器上触发 "cancelled" 事件。那是你应该听的。我还建议在发生这种情况时采用某种方式停止写入流。
您的方法看起来像一元 request/streaming 响应方法。这意味着在服务器端,您有一个可写流,而可写流没有 "end" 事件。这是可读流上的一个事件,表示您已完成阅读。
只要客户端不再收听流,我就需要在服务器中捕获。我认为这样做可以:
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 获得了这方面的基础知识,但我一定遗漏了一些东西。
客户端突然断开连接,而没有正确地与服务器通信,最终应该在服务器上触发 "cancelled" 事件。那是你应该听的。我还建议在发生这种情况时采用某种方式停止写入流。
您的方法看起来像一元 request/streaming 响应方法。这意味着在服务器端,您有一个可写流,而可写流没有 "end" 事件。这是可读流上的一个事件,表示您已完成阅读。