I have an app whose primary function works in real time, through websockets or long polling. However most of the site is written in a RESTful fashion, which is nice for apps and other clients in the future. However I’m thinking about transitioning to a websocket api for all site functions, away from rest. That would make it easier for me to integrate real time features into all parts of the site. Would this make it more difficult to build apps or mobile clients?
Edit: found that some people are already doing stuff like this: https://github.com/socketstream/socketstream
Not to say that the other answers here don’t have merit, they make some good points. But I’m going to go against the general consensus and agree with you that moving to websockets for more than just realtime features is very appealing.
I am seriously considering moving my app from a RESTful architecture to more of an RPC style via websockets. This is not a “toy app”, and I’m not talking about only realtime features, so I do have reservations. But I see many benefits in going this route and feel it could turn out to be an exceptional solution.
My plan is to use DNode, SocketIO, and Backbone. With these tools, my Backbone models and collections can be passed around from/to client and server by simply calling a functions RPC-style. No more managing REST endpoints, serializing/deserializing objects, and so forth. I haven’t worked with socketstream yet, but it looks worth checking out.
I still have a long way to go before I can definitively say this is a good solution, and I’m sure it isn’t the best solution for every application, but I’m convinced that this combination would be exceptionally powerful. I admit that there are some drawbacks, such as losing the ability to cache resources. But I have a feeling the advantages will outweigh them.
I’d be interested in following your progress exploring this type of solution. If you have any github experiments, please point me at them. I don’t have any yet, but hope to soon.
Below is a list of to-read-later links that I’ve been collecting. I can’t vouch that they are all worthwhile, as I’ve only skimmed many of them. But hopefully some will help.
Great tutorial on using Socket.IO with Express. It exposes express sessions to socket.io and discusses how to have different rooms for each authenticated user.
Tutorial on node.js/socket.io/backbone.js/express/connect/jade/redis with authentication, Joyent hosting, etc:
Tutorial on using Pusher with Backbone.js (using Rails):
Build application with backbone.js on the client and node.js with express, socket.io, dnode on the server.
Using Backbone with DNode: