Efficient way to handle asynchronous two-way messaging across data centers?

Just another point of reference:

I feel that distributed Erlang should be used only to power the same code, i.e. multiple instances of the same “thing” which are connected into a cluster. Adding different types of systems (using different OTP apps and having a different process structure) might cause various problems with distributed parts of the code (e.g. pg2, Phoenix PubSub or Phoenix Tracker).

Which was a followup to this.

So that would make a case for designing an application specific protocol that would carry on the “conversation” across something like HTTP or a websocket.