constructor() {
            this.readSockets = new Map();
            this.writeSockets = new Map();
        }
Cache of WebSocket instances per channel

For reading there can only be one channel with each UUID, so we
just have a simple map of {uuid: WebSocket}. The socket can be
closed when the channel is closed.

For writing there can be many channels for each uuid. Those can
share a websocket (within a specific global), so we have a map
of {uuid: [WebSocket, count]}.  Count is incremented when a
channel is opened with a given uuid, and decremented when its
closed. When the count reaches zero we can close the underlying
socket.