The past and future of WebSocket++

I have long been interested in writing and experimenting with web based virtual worlds. Some of my more recent projects in that area ran into communication limitations. In 2010 there was no good way to do low latency bidirectional communication to a browser without resorting to non-standard plugins. While researching my options I came across the IETF hybi working group that was chartered to develop exactly what I was looking for. As this is a capability I felt the web sorely needed a standard solution for I joined the group.

WebSocket++ was born as an early implimentation of the WebSocket protocol to test out ideas proposed by the working group and later on performance and interoperability tests. In the last two years there have been three major versions of WebSocket++. Versions tagged 0.1 were very rough experimental versions and not compatible with the final RFC6455 spec. It can be found in the 'legacy' branch on GitHub. Version 0.2 was built for performance and interoperability testing (alongside my work implimenting tests for the Autobahn suite). It can be found in the 'Master' branch on GitHub.

While it is a complete implimentation of RFC6455 a number of early design decisions made it impractical for certain use cases, especially those involving multithreading. In the year or so that version 0.2 has been available I have gathered a great deal of feedback about how developers are using C++ WebSocket libraries. I've continued to work with the hybi group on standardizing some extensions to the WebSocket protocol, in particular message compression. The completion of C++11 has also brought a number additional options that make sense to use. To address these issues and build a library more suitable for general purpose usage I have been working on a third (and hopefully final) version of the library, 0.3. If no major issues are raised, 0.3 will become the stable 1.0 release.

An early draft of 0.3 is avaliable now in the 'experimental' branch of the WebSocket++ GitHub repository. Its core contains a complete RFC6455 implimentation and strictly passes all Autobahn tests. The application facing interface is stil rough and incomplete. Areas that still need quite a bit of work are the client role, logging system, extension system, and the example code. In addition to examples, the 0.3.x branch will also be the first version of WebSocket++ with first party documentation & a user manual. That manual is now avaliable at www.zaphoyd.com/websocketpp/manual and will continue to be fleshed out as I nail down the application facing interfaces.

I will be posting more information about some of the design decisions that went into 0.3 and in particular the areas that are breaking changes from 0.2. I welcome any feedback on version 0.3 either here, on GitHub, or via email at websocket@zaphoyd.com

Add new comment