Two WebSocket Channels in One App — Without the Drama
In WikiMind, we split WebSocket by responsibility: one channel for notifications, the other for collaborative CRDT document editing. That way, one socket doesn’t affect the other.

In WikiMind, we split WebSocket by responsibility: one channel for notifications — the bell icon — and the other for collaborative CRDT editing of documents. Why? So one failure doesn’t take everything down like a row of dominos: if one socket drops, the other keeps doing its own thing.
We made the notification channel push-only: the server just pushes events. If the user is offline, the message won’t reach the socket, but it doesn’t get lost in terms of meaning: it is still stored in the database and can later be read via REST. In other words, real-time where possible, and a reliable fallback where needed.
For CRDT, this is especially critical: collaborative editing should not depend on the fate of the bell icon. In an era when everyone is chasing real-time UX and AI-collab, this kind of isolation is not a “nice to have” — it’s the baseline. Like in an office: chat can lag, but the document has to be saved 😄