Introducing SocketRocket: A WebSocket library for Objective-C

February 07, 2012

The WebSocket Protocol is a network protocol designed for the web to enable browsers to have bi-directional communication with a server.

WebSockets are also useful in native mobile applications. By using WebSockets, you can reuse existing tools built for the web, just like how most mobile apps reuse HTTP for their APIs.

Using WebSockets has its advantages over raw TCP:

  • Not having to reinvent your own framing protocol. The WebSocket Protocol is pretty efficient and flexible. You probably won't write a better one.
  • Reuse most infrastructure made for HTTP/1.1 such as routing, reverse proxying, authentication, etc. (However, there are some proxies that don't support WebSockets yet)
  • Reuse server logic built to talk with browsers. For example, you could write a native iPad client for Cube.
  • Communicate with Chrome Developer Tools (more to come on this in future posts)

WebSockets on your iOS device

At Square, we devote two weeks a year to fix annoying problems that are outside the scope of our normal jobs. We call them Fix-it weeks. During our last Fix-it week, we wanted to fix network debugging tools for iOS. Well, we made it happen. The plan was to talk to Chrome's remote debugging API which just happened to be a JSON protocol over WebSockets. There were no up-to-date (hybi-17 at the time) WebSocket client libraries for iOS at the time. So we wrote one.

It's called SocketRocket. It's a WebSocket client written in modern Objective-C. It conforms to RFC 6455, the latest WebSocket specification. It supports wss since the connection is based off of CFStream (bridged to NSStream).

This also means it supports iOS 4.x and doesn't have any external dependencies. SocketRocket uses Automatic Reference Counting to keep the code simple and Grand Central Dispatch to keep the logic in the background.

You can check out SocketRocket on GitHub here:

https://github.com/square/SocketRocket

It comes with a demo iOS client and some demo server code.

There is also some automated tooling to install and run the autobahn test suite against the library. SocketRocket passes all ~300 of them. (well, it's non-strict on two UTF-8 tests.)

The README explains all this and more.

Mike Lewis
iOS Engineer @mikelewis

Comments

Get support help at squareup.com/support. We'll delete off-topic comments.