Because we think it is very important to serve our users changes and notifications in a real-time fashion, we evaluated a lot of tools, components to achieve this. First we looked at Socket.IO, NowJs and Node.js, but we soon found out that this is not very hard if your team is used to Microsoft tooling. Since the ROBIN frontend (we call it the Agent Desktop) is a web application that is built using the Microsoft stack, we need a framework that is better integrated with the stack we know.
Azure and other considerations
We run ROBIN on Azure which added another complexity. We started out using raw Websockets and used Nugget where we only targeted the newest browsers like Chrome and Firefox, but as soon as the websocket specs evolved Chrome did no longer supported our version and Firefox did not support websockets anymore. So we did an evaluation of real/time Comet frameworks that work with .NET. This was before SignalR existed.
We evaluated Nugget, Pokein, Kaazing and WebSync.
The points we evaluated are:
- features (Websockets, Comet)
- client and server framework
- browsers that are supported
- learning curve
- Azure support
We found that while Websync and Pokein did not support websockets at the time, they handled Comet really well. We knew that WebSyncwill support websockets as soon as the specs are official and browsers are supporting these official specs. We found that WebSyncwas more mature, they are robust and their api’s are well documented, although they are more expensive they are most mature also. We found that the google group they use to communicate with their community is very responsive, they will help you as soon as they can.
Whenever we had an issue they helped us and the issue was fixed quickly up to now.
We implemented WebSync and are using it in production for a while now, we also have an iPhone app that uses WebSync. This was easy, because they provide iOS examples.
Things to improve
We find that Azure integration works, but can be done better. The configuration of the database (WebSyncneeds four tables in a database) is handled in web.config. When working in azure ServiceConfiguration is preffered, but not supported by WebSync at this moment. So all instances need a configutred web.config and serviceconfigs will not work.
SQL Azure is supported and Azure Table Storage can be used for WebSync storage also, but performance is better on SQL Azure.
All in all, we are very pleased with WebSync, it abstracts the real-time communication away and works really well for us. We hope to grow together with WebSync to a real-time enabled future for ROBIN!
My thoughts exactly...