v5.0.0
5.0.0 (2021-06-08)
Features
- Bidirectional ping/pong message types (#201) (1efaf83), closes #117
- client: Rename
keepAliveoption tolazyCloseTimeout(3c1f13c) - uWebSockets: Drop deprecated
requestcontext extra (02ea5ee)
BREAKING CHANGES
- Because of the Protocol's strictness, an instant connection termination will happen whenever an invalid message is identified; meaning, all previous implementations will fail when receiving the new subprotocol ping/pong messages.
Beware, the client will NOT ping the server by default. Please make sure to upgrade your stack in order to support the new ping/pong message types.
A simple recipe showcasing a client that times out if no pong is received and measures latency, looks like this:
import { createClient } from 'graphql-ws';
let activeSocket,
timedOut,
pingSentAt = 0,
latency = 0;
createClient({
url: 'ws://i.time.out:4000/and-measure/latency',
keepAlive: 10_000, // ping server every 10 seconds
on: {
connected: (socket) => (activeSocket = socket),
ping: (received) => {
if (!received /* sent */) {
pingSentAt = Date.now();
timedOut = setTimeout(() => {
if (activeSocket.readyState === WebSocket.OPEN)
activeSocket.close(4408, 'Request Timeout');
}, 5_000); // wait 5 seconds for the pong and then close the connection
}
},
pong: (received) => {
if (received) {
latency = Date.now() - pingSentAt;
clearTimeout(timedOut); // pong is received, clear connection close timeout
}
},
},
});- uWebSockets: The deprecated uWebSockets
requestcontext extra field has been dropped because it is stack allocated and cannot be used ouside the internalupgradecallback. - client: Client
keepAliveoption has been renamed tolazyCloseTimeoutin order to eliminate ambiguity with the client to server pings keep-alive option.