Enabling real time collaboration with RSocket
In many web applications, the majority of client-server interactions can be expressed with the request-response paradigm, which maps pretty well to HTTP. However, in an application that is highly collaborative, where users can interact with each other, the request-response paradigm hits its limits. Users expect to see each other’s actions reflected as soon as possible and have become accustomed to real time collaborative experiences.
In the request-response world, requests for data will typically be initiated from the client, however, in the real time world, it is useful to facilitate the ability for backends to push data to the clients before it’s requested. Building such a system is difficult when the number of clients is large, because every client must maintain a connection to the backend service. The scaling and reliability considerations are significantly more complex than a request-response based system. At Canva, we enabled our users to collaborate with each other by introducing services that support bidirectional streaming with RSocket. This talk discusses the challenges that we faced building these services, and the solutions we used to ensure our reliability requirements were met.