One graphql-transport-ws connection: the schema it serves plus the protocol
state a connection carries — whether connection_init has arrived, the
parameters it brought, the operation ids currently running, and the two timers
the protocol defines.
This package has no async runtime and no clock of its own, so the timers are
state plus a transition and nothing more: a server drives them by calling
tick with a millisecond reading of a monotonic clock, as often as it likes
(once a second is plenty), and sending whatever frames come back. Nothing else
starts the connection-init countdown or emits a keep-alive ping.