I'm doing this right now with an Elixer/Phoenix backend and a VueJS frontend. I use Phoenix socket client and register events that commit mutations to a Vuex store. It feels super snappy. It's still naive though. It doesn't promise anything, so if the channel stops sending for some reason ... well that hasn't happened yet.