Estoy usando la transmisión del servidor grpc de nodejs para entregar datos en tiempo real desde el servidor a los clientes. Como los clientes quieren escuchar los datos, deben llamar a una función de servidor que devuelve un flujo de servidor. Luego, si el cliente desea finalizar la escucha, supongo que debería llamar al método final en el objeto de llamada. Pero desafortunadamente no pude encontrar ninguna pista en la documentación sobre cómo hacer esto. Probé call.end y call.destroy y call.cancel pero end and destroy no hizo nada y cancel arroja el siguiente error. El código del lado del cliente de muestra es el siguiente:
function getData(token, userId) { const data = { token, userId } let call = DataService.getData(data) call.on('data', res => { console.log(res) }) call.on('status', console.log); call.on('error', console.log); setTimeout(() => { console.log('destroy') call.cancel() }, 5000) }y el error es:
Error: 1 CANCELLED: Cancelled on client at Object.callErrorFromStatus (...grpc\node_modules\@grpc\grpc-js\build\src\call.js:31:26) at Object.onReceiveStatus (...grpc\node_modules\@grpc\grpc-js\build\src\client.js:330:49) at Object.onReceiveStatus (...grpc\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:299:181) at ...grpc\node_modules\@grpc\grpc-js\build\src\call-stream.js:145:78 at processTicksAndRejections (internal/process/task_queues.js:75:11) { code: 1, details: 'Cancelled on client', metadata: Metadata { internalRepr: Map(0) {}, options: {} } }