- Bugfix: Ensure that if session.ping returns false we correctly identify fail the keepalive and connection - Bugfix: Ensure that if the interval between keepalives being sent occurs faster than the prior keepalive's timeout that we do not overwrite the reference to the prior timeout. Prior implementation could have in theory prevented a valid keepalive timeout from clearing itself. This rewrite keeps every timeout as a local (vs a shared state per session). Even if the timeout outlives the lifetime of a session, we still guard against errors by checking that the parent interval is not false-y. I reckon this could result in a short-term memory leak per session which is bounded for a maximum of keepaliveTimeoutMs. On the other hand even with that potential for a short reference hold, this implementation proposed here is more correct I think. One alternative we could do is keep a list of pending timeouts.. which is complex for a rare situation that will self resolve anyhow when keepaliveTimeoutMs is reached. - Bug Fix: keepalive intervals were being cleared with an incorrect clearTimeout before. Not sure if this was causing intervals leaks in some nodejs impls or not. (v20.13.1 seems to accept this mismatch without issue) - Rename variables for clarity, to prevent future bugs like swapping clearInterval vs clearTimeout. - Implementation is repeated in two places, per warning from https://github.com/grpc/grpc-node/pull/2756#issuecomment-2136031256 - This commit supercedes the prior PR on a master branch which was out of date. https://github.com/grpc/grpc-node/pull/2756
gRPC on Node.js
Implementations
For a comparison of the features available in these two libraries, see this document
Pure JavaScript Client and Server
Directory: packages/grpc-js
npm package: @grpc/grpc-js
This library implements the core functionality of gRPC purely in JavaScript, without a C++ addon. It works on the latest versions of Node.js on all platforms that Node.js runs on.
C-based Client and Server (deprecated)
Directory: packages/grpc-native-core (lives in the grpc@1.24.x branch) (see here for installation information)
npm package: grpc.
This is the deprecated implementation of gRPC using a C++ addon. It works on versions of Node.js up to 14 on most platforms that Node.js runs on.
Other Packages
gRPC Protobuf Loader
Directory: packages/proto-loader
npm package: @grpc/proto-loader
This library loads .proto files into objects that can be passed to the gRPC libraries.
gRPC Tools
Directory: packages/grpc-tools
npm package: grpc-tools
Distribution of protoc and the gRPC Node protoc plugin for ease of installation with npm.
gRPC Health Check Service
Directory: packages/grpc-health-check
npm package: grpc-health-check
Health check service for gRPC servers.
gRPC Reflection API Service
Directory: packages/grpc-reflection
npm package: @grpc/reflection
Reflection API service for gRPC servers.