Phoenix and Mercure

Hey all,

I wonder if you have ever heard of / discussed Mercure, which is a protocol for real-time communication and kind of an abstraction of pub-sub.
I think that Phoenix channels are quite on par with the functionality it offers, but still wonder if anything could be gained by writing a Phoenix-Channel based implementation for a hub / server.

As far as I can see, several frameworks, i.e. Symfony and Laravel, include modules to use a mercure implementation to publish updates to client applications via HTTP/2.

There is a reference implementation written in Go, but as far as I can tell, having an Elixir implementation (which would probably perform very well) could help spread Elixir to other ecosystems such as PHP in a world where real-time updates become more important.

What do you think?

Disclaimer: up until now I’ve never even heard of Mercure. So my impression might be totally off.

From what I see at a glance I fail to gather how having support for Mercure would provide a tangible advantage over what Phoenix channels already provide today.

Why do you think it would help to spread Elixir to other ecosystems?

Seems like Mercure was created to make persistent connection easier for non-persistent server environments or languages. So they created a hub between the client and the server. If you already have a client speaking their protocol then phoenix could probably be hub and application server in one. For new projects I’m not sure I’d be interested in it though.

2 Likes

I already mentioned I think channels are on par with the things it offers. That is why I think it would probably be very easy to implement a hub in elixir with phoenix channels.

I could also imagine streamlining the client-side channel javascript client with this protocol. Not sure if that is worth anything, but it would allow channel-based code to work with any hub.

The more concrete usecase for a hub would be adding real-live functionality to languages lacking a good tool for that (like PHP). A hub implementation (possibly the one in Elixir) could be used to overcome this for existing apps written in, say, Symfony (or any other framework that happens to have a Mercure module).

This thread is not to convince anyone that there would be merits to this. It is more trying to gather your thoughts if there are merits.