每当客户端不再侦听流时,我就需要在服务器中捕获。我以为这样就行了
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教程那里得到了这方面的基本知识,但我肯定遗漏了什么。
发布于 2017-10-12 15:57:03
客户端突然断开连接,而不与服务器正确通信,最终应该触发服务器上的“取消”事件。这就是你应该听的。当这种情况发生时,我还建议使用某种方式停止写入流。
您拥有的方法看起来像一个一元请求/流响应方法。这意味着在服务器端,您有一个可写流,而可写流没有“结束”事件。这是一个可读流上的事件,以指示您已完成读取。
https://stackoverflow.com/questions/46700751
复制相似问题