also, yes, changing the threading model probably would fix it in my code, so managing pings and whatnot was done in one thread, but the actual socket management data would still blow up even there, and when you consider that 2kb is the coroutine load per socket, and the socket itself is probably more than that, it was probably actually just holding that socket open that was the problem, while trying to "throttle" their requests
idk what to say, it's just a bad model, if you ask me, i'm pretty sure that there is likely myriads of historical experience relating to request/response protocols being a disaster to manage over bidirectional sockets