David Fiala ad598ecbe4 Serverside keepalive error detection and cleanups
- 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
2024-05-28 14:53:46 -07:00
2017-09-13 02:06:15 +02:00
2023-01-22 22:54:12 +00:00
2017-09-13 02:06:15 +02:00
2017-08-02 15:11:07 -07:00
2017-09-13 02:06:15 +02:00
2017-08-02 15:10:19 -07:00
2021-07-28 12:38:24 -07:00
2022-10-17 10:11:38 -07:00
2021-01-22 10:57:55 -08:00
2021-09-02 23:00:11 +05:30

Build Status

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.

Description
gRPC for Node.js
Readme Apache-2.0 35 MiB
Languages
TypeScript 90.9%
JavaScript 7.3%
C++ 0.9%
Shell 0.6%
Dockerfile 0.1%