Why
I had this idea about the highly reactive collaborative web application. After messing around I ended up with PoC which consisted of bunch of Go services and on top of that I somewhat implemented CQRS architecture.
How
General idea was that websocket is used as protocol. Custom message format is created and synchronized between TypeScript and Go with help of Protocol Buffers, gRPC and few gRPC extensions. But this process is bit cumbersome and this is where I went off-road into Bazel and DevOps…
Web produces and streams events to Kafka consumers. Once data are processed some messages are broadcasted over websocket to the application. This basically enables fast real-time collaboration in application.
Challenges
Little to almost none of the content in the Internet to learn in depth about these concepts. Especially if you are newbie like me and don’t know even how to ask the question. And if you do ask, then typical answer is
you don’t need this.
But… I didn’t want to argue with some random person in the internet whether I need or don’t need this complexity. So… I gave up with asking these kind of questions to the internet.
And my best source of learning became GitHub Search
Update 2025
At this point, I just went into Elixir Phoenix framework. Turns out, they are basically playing with the same conceptual idea of using websocket for “reacive UI” updates. Going into Elixir for me is not going easy… but I am committed to it. At the moment I’m trying to create higly reactive Deck GL map.