We've talked about this different times. If you expect to have an undefined number of requests during a session, it's more efficient and performant to use WS. Yes, you could batch and create a single HTTP request with all the targets a user wants. But that doesn't work in all situations. You cannot know beforehand all the targets the user may have during a session, so it'll probably end up making a number of small requests.
Also, I agree DVMs are a tragedy, they're very poorly designed. But nothing stops you from receiving a response that is a subscription. Indeed, you can do that with
@ContextVM now, so that's also an optimization in some scenarios where users subscribe and receive responses as long as they stay online.
And yes, aside from all of that, I agree relays could be optimized. WS introduces the 101 overhead, and so on, but relays as message bus (DVMs/CVMs) offer something you cannot get with an HTTP server, which is getting rid of IPs, DNS, SSL, NATs, etc. If you want to run an HTTP server, you have to comply with all of that.
To make this clear: I'm not against one solution or the other. Different approaches, different tradeoffs. I think that open ranking is good to be running on HTTP servers. I wish it could be transport agnostic so I can implement it in Relatr.