You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The library includes a broadcast utility, with detailed documentation and motivation here.
However, today that utility only works with the asyncio API of WebSockets.
That leaves users of the sync API with two possibilities, if they want to broadcast a message without risk of blocking the thread if some client's buffer is full:
Implement broadcast by accessing directly the socket and the sans-IO API to set the sockets to be non-blocking during the broadcast. (tricky!)
Implement broadcast by the way of application-level queues, and per-client threads consuming from the queues (runtime and implementation overhead)
It would be nice if the sync API of this library included a ready-made broadcast utility.
The text was updated successfully, but these errors were encountered:
As long as it doesn't exist in the library, I'd recommend against your first option.
Your second option can be implemented quite easily with a ThreadPoolExecutor that will handle the queuing and consuming for you. Given enough threads and a short enough timeout on send(), you can guarantee that the operation will complete within a certain time frame e.g. if you have 50 connections, use 25 threads and a timeout at 5 seconds and you will finish within 10 seconds.
If you have 5000 connections you shouldn't be using the thread-based implementation in the first place :-)
The library includes a
broadcast
utility, with detailed documentation and motivation here.However, today that utility only works with the asyncio API of WebSockets.
That leaves users of the sync API with two possibilities, if they want to broadcast a message without risk of blocking the thread if some client's buffer is full:
broadcast
by accessing directly thesocket
and the sans-IO API to set the sockets to be non-blocking during the broadcast. (tricky!)broadcast
by the way of application-level queues, and per-client threads consuming from the queues (runtime and implementation overhead)It would be nice if the sync API of this library included a ready-made broadcast utility.
The text was updated successfully, but these errors were encountered: