To my eternal shame, I’ve never blogged about one of the most important open source projects I’m involved in: Helios. Helios is for all intents and purposes a .NET port of Java’s wildly successful Netty project, the reactive high-performance socket server that powers the internals of systems like Apache Cassandra and Typesafe’s Akka project.
Helios has dutifully powered the remoting layer behind Akka.NET (my main OSS project) for the past couple of years, and is capable of being a powerful tool within the .NET distributed programming ecosystem in its own right.
Helios’ job is provide .NET developers with the following tools:
- An asynchronous, event-driven network application programming framework that works across both TCP and UDP, client or server;
- Message framing and buffering capabilities; and
- An extensible, simple programming model; and
- Lots of other useful tools for working with sockets, such as serializers, loggers, throttling controls, and so forth.
The previous implementations of Helios (currently at version v1.4) have also included a number of other useful utilities such as circular buffer implementations and other types of useful collections.
However, Helios hasn’t been able to provide .NET developers with the following thus far:
- Security options for socket communications using industry-standard protocols such as TLS and DTLS;
- A sufficiently flexible, intuitive programming model that can easily be picked up by a new user;
- Robust and predictable socket behavior under all circumstances (we currently have some race conditions when it comes to detecting malformed message frames;) and
- Extremely good performance out of the box.
I attribute most of these shortcomings to me having to learn the hard way how to work with sockets during a period of immense time pressure.
Helios 2.0: a Clean Slate
Thus I’m starting work on Helios 2.0 beginning by cleaning the slate. I deleted all code from the
helios-2.0 branch that I wasn’t 100% sure we would be using in Helios 2.0.
My goal for Helios is to have it truly become a C# port of Netty, leveraging the years of valuable production knowledge from Norman Maurer and the tens of thousands of other Netty users.
Looking for Contributors
I have a bit of baseline work that needs to be done on the core Helios 2.0 skeleton yet before it’ll be actionable for other contributors to get involved, but you can start by reviewing the Helios 2.0 specs and forking / starring the Helios Github repository.
In the meantime, if you’re interested in the project then subscribe to updates from this blog! I’ll be regularly updating my development journal for Helios 2.0 as I make work on it individually and as other contributors send pull requests too!