Earlier quoted context omitted.
I don't know anything about websockets, but isn't it over tcp? Meaning if the client isn't keeping up, their buffer should be full and the server should be blocked from sending more until it drains (unless it's queuing the messages somewhere else?). Or is that not how tcp backpressure works?
TCP provides backpressure but depending on it to provide backpressure over the internet will greatly increase latency, in my experience. In one application I was streaming jpeg frames over a websocket and by the time the server application experienced backpressure there were 10s of seconds of messages buffered between the server and client. So the message rate would eventually settle into a rate the connection could…
Or, perhaps you need to tune the TCP-Window to your application.