Only reason I can think of is to traverse firewalls that block outbound sockets but don't block HTTP+WebSocket.
That aside, it seems a bit ridiculous, given that we already have sockets, to bolt on a protocol that exists almost solely to work around security issues involved in a browser opening a socket.
I think it's the same reason you would want to use good old HTTP over raw sockets for a request/response API, even though with a native client you could just invent your own protocol.
If you want bidirectional communication to your app, it's much easier to make a server that uses the WebSocket Protocol (tornado, etc.) instead of rolling your own server and protocol.
So, following up on the link in another comment on this article [1] to socket.IO-objc [2], one goes through a few forks of cocoa-websocket [3,4,5] to arrive at zimt [6].
Are there reasons to use SocketRocket over these other libraries (either socket.IO-objc, or the various forked lineage of cocoa-websocket/zimt)?
(Also, to ask the question I always have to ask: is there a reason for a new library rather than contributing to one of the existing ones, possibly even helping Unitt support RFC6455?)
Cocoa-websocket doesn't seem to support the latest standard[1]. You can tell because the handshake has key1 and key2 which is protocol 00[2]
Re: socket.IO, I haven't actually used it, so correct me if my assumptions are wrong, but the objc client doesn't seem to use WebSockets as a transport. So I imagine you can get the same bidirectional semantics if by using socket.IO-objc if you want to limit yourself to servers written in node (or have a socket.IO bridge).
However, why not go with standards? Since socket.IO supports websockets, the objc implementation could be backed by SocketRocket easily.
My two biggest complaints against Unitt & cocoa-websocket aside from them not supporting RFC6455 is having CocoaAsyncSocket as a dependency.
I've dug deep into it's implementation, and even had a prototype of SocketRocket that used it (basically went from CocoaAsync to dispatch_io to CFStream), and I'm not too impressed. Also, CocoAsync 2x or 3x more code than the entire WebSocket implementation without it. It also has drastically different codepaths for iOS and Cocoa and it's very difficult to see what's going on. Makes testing more difficult.
The other reason I decided to roll my own is just a learning experience. At first I wanted an excuse to play with new libdispatch io stuff[3].
The reason Unitt didn't work for us is that it isn't updated to work with the latest WebSocket protocol. This is an issue, especially since there's finally a standard (RFC 6455)
tools.ietf.org/html/rfc6455
Tornado is nice since it implements some of the legacy versions of WebSockets, but there are many servers that will probably deprecate them sooner rather than later.
This would be cool. We've been experimenting with uses for WebSockets. One of them is mocking push notifications in the simulator. The other is basically implementing a pusher-like service with a pub-sub model.
If I'm using Socket.IO via an Obj-C lib, is there a point to taking a look at this? Should the Socket.IO community look at integrating this as the engine behind the client on Obj-C, or is there little/no benefit?
I'm unsure what you mean by "Socket.IO via an Obj-C lib". Could you send a link? It looks like Socket.IO is node (which I don't believe you can use in iOS).