HandbookArchitecturePersistent connection via WebSockets

Persistent connection via WebSockets

This example demonstrates how to use GraphQL over WebSocket Protocol to establish a persistent connection between services and a gateway. So the connection between the gateway and the service not only exists during the request-response cycle, but also during the entire lifetime of the gateway.

Sandbox

⬇️ Click ☰ to see the files

You can also see the project on GitHub here.

Summary

When you start the gateway, it starts WebSockets connections for each service through WebSockets executor;

const productsExec = buildGraphQLWSExecutor({
  url: 'ws://localhost:4001/graphql',
  lazy: true,
  lazyCloseTimeout: 10_000,
  onClient
})

And after that it keeps that open for the next 10 seconds defined with lazyCloseTimeout. You can keep them open forever by removing that parameter and setting lazy to false but we prefer to allow the upstream services rest if the gateway is not busy in a certain time.

The main point is to avoid the overhead of establishing a new connection for each request. This shows WebSockets protocol is not only useful for subscriptions but also for regular queries and mutations if you have a high traffic in your gateway.