HTTP/2 introduces some very interesting features such as pipelining, multiplexing, and server push promises; which on their own are awesome. In return, we sacrificed WebSockets.
In theory HTTP/2 allows bidirectional communication between server and client in the form of push promises. The server can send responses to the client before even being asked to. Again; awesome. These requests though are different from the client's requests.
So the question at hand:
Is there a way to have a single HTTP/2 connection that allows both server and client to send arbitrary messages (extra points for binary ones) to one another without having to define a different protocol for client sent messages and server sent messages?
WebSockets are a great example of what I am looking for as any of the two parties can initiate the connection and then both can send messages.
A solution that doesn't break HTTP/2 would be ideal but protocol abuse is also welcome.
Thank you very much in advance.
ps. The objective of this exercise is to figure out if a transport protocol such as GRPC, Thrift, etc can be designed on top of HTTP/2 without a server/client architecture, but where both sides can send and receive messages so features such as req/resp, pub/sub, rpc, etc can be build on top of.