Latest release of The Server Framework: 6.9.4

Version 6.9.4 of The Server Framework was released today.

This release includes changes to support Visual Studio 2019 (16.4), some new functionality and a bug fix to our OpenSSL ALPN handling code.

Happy New Year!

2020. Wow.

Things are going from strength to strength here at JetByte. As ever we have lots of games companies using The Server Framework and they tend to push us more than our finance clients ever did. Our secretive Online Gaming Company now has more than 400 million players per month on their cloud hosted server system and we're still developing the native C++ side of this for them. It's matured into a stable and flexible system and they just keep on pushing it in new directions. As part of this we've been working on the Linux and MacOS ports of The Server Framework and these are now working well and provide our clients with more flexibility. We're also doing more work for Eonic Games though they have taken over most of the development work on the server that we originally built for them. They have new things coming out soon and we're helping them get there!

Our Industrial Control Client is still keeping us busy, spelunking around in their legacy code and making things better and more flexible. They're still very hush, hush, so if we told you any more we'd have to kill you...

The large American postal company that will remain nameless is still running its extended pilot phase. We found a bug (so far just the one). We fixed a bug. We all decided to add a test mode to the system so that they could flush out protocol and connectivity issues with their mail sorting hardware providers. Lots of interesting work here.

This year will bring new releases of The Server Framework, including options for Linux and MacOS. We're always interested in getting involved in new projects, so do get in touch if you have something that you think we could help with. In the meantime, we'll be here, doing what we love to do; writing high performance server code in C++!

Latest release of The Server Framework: 6.9.3

Version 6.9.3 of The Server Framework was released today.

This release includes changes to support Visual Studio 2019 (16.3), lots of code changes to migrate towards "modern C++" idioms, issues raised by Resharper++ and changes in include path separators and file name case to support compilation on Linux. We have also removed some code that was previously deprecated and dropped support for Visual Studio 2013.

There are no bug fixes or intentional functionality changes to this release but a LOT of files have been touched; we decided to put this release out so that functionality and bug fix changes can be more easily seen going forwards.

I don't do roadmaps, but...

I'm in the process of putting together a series of releases for The Server Framework. It's a little more complex than usual so I thought I'd explain why that is.
For the past year we've been working on a Linux/Mac version of The Server Framework with several clients. This has involved adjusting a lot of the code and moving some stuff around; for example there was code in our "Win32Tools" library that isn't Win32 or even Windows specific and so that now lives in a new tools library, "CoreTools", that contains code that can build on all platforms. Switching to building code with multiple compilers tends to expose some new warnings and errors and building on Unix platforms requires that we change all of the path separators in the include statements (thankfully Windows supports 'both' path separators). We've had a "Linux spike" version of the code for some time and now we're pulling these changes into the mainstream releases in preparation for releasing the UNIX versions of the code to a wider audience.

In addition to the UNIX changes we have a major design change for the "SocketTools" library. This is stuff that has been in progress since around 2015 and makes it easier to unit test the code and makes it possible to support other operating systems. The main thrust of these changes is that "internals" of the networking code are now easy to replace, either with mocks for testing or with different implementations for cross platform support; so we can support IOCP, EPoll, KQueue, etc. The "new sockets" code lets 90% of your server stay the same no matter which platform it's running on and 'simply' switches out the code that does the networking. There's an optional "compatibility" layer that helps with migration but, in general, the best approach is to change to using the new callback interfaces and the whole "new sockets" design. The code massively simplifies things, especially in terms of "pluggable filters" for things like TLS and flow control (in summary, pluggable filters are no more as we were the only people to ever develop them, they adversely affected performance and they were complex to write, TLS, TCP flow control, etc are all now "included" in the code using the "internals" concept).

So, to that end, we have the following releases in the pipeline:

  • 6.9.3 - This is a release of the 6.9.2 code with the textual changes for include paths and cross platform compilation and changes to move the code towards "modern C++". Since we're now reaching the point where some of the older Microsoft compilers are out of support we can drop support for them and start fully utilising some slightly more modern C++ features where appropriate. There are no bug fixes in this release but there's a LOT of change.
  • 6.9.4 - This is a new features and bug fix release. Right now we're still accumulating issues for this release, it currently contains: a design change that makes dealing with read completion errors slightly easier for some clients; some debug output when an async file log becomes synchronous due to the amount of log lines queued (this seriously affects performance and often doesn't get noticed, it will now); some optional debug for helping with TLS handshake issues.
  • 7.0 - This is a release that takes 6.9.4 and moves the code around so that we could build cross platform, note that it doesn't actually include any code that lets you build cross platform. Like 6.9.3 there's a lot of change to the files but, hopefully, no functionality changes. Things like JetByteTools::Win32::_tstring are now JetByteTools::Core::_tstring for example and include paths have changed.
  • 7.1 - This is intended to be a "normal" 7.x release with new features and bug fixes.
  • 7.2 - This will include support for our "new sockets" code.
  • 8.x - It's intended that the UNIX support will be released in release 8.0

The 6.9.3 release is due soon. The 6.9.4, 7.0 and 7.1 releases are expected to be released in quick succession, if not simultaneously. Upgrading your code to 7.0 will take some work. We have a simple 'find and replace' program that can be run on 6.9.x code and that does "most of the work", but it's not perfect so you should allocate more time than normal for dealing with a framework upgrade and, ideally, let us know in advance when you intend to do the work so that we can ensure we have space in our schedule to help you. Upgrading from 7.1 to 7.2 will be painless unless you decide to "opt in" and switch to "new sockets". You only NEED to switch if you intend to move to cross platform support in 8.0, though "old sockets" will eventually be deprecated.

Moving forward there will be a Server Framework Option Pack for UNIX. I expect this will include both the Linux and MacOS changes and I expect that it will be priced the same as the majority of the other Option Packs. If you'd like to get involved with the UNIX beta code then get in touch.

The 6.9.x and 7.0/7.1 releases are currently moving through our build and test system, 7.2 and 8.0 are further off.
Version 6.9.2 of The Server Framework was released today.

This release includes changes to support Visual Studio 2017 (15.9), Visual Studio 2019 (16.2), design changes to the PerfMon tools library to improve performance and some bug fixes.
The Linux port of The Server Framework is going really well and we now have investigated both libuv and epoll back ends. There's still a lot of work to do before this will be something that we're releasing generally but the client's that are working with us on this are really excited by how well it's going.

The massively modernised, and far in the future 7.0 release of The Server Framework will include the Linux changes and our 6.9.2 maintenance release is due for release in Q2; it's been a while since we last had a release but there have been no bugs reported and so there's not really much to release as most of the effort is going into the stuff that will eventually become the 7.0 release.

Our work with the large American postal company that will remain nameless is about to go into an extended pilot phase and we're working on last minute adjustments so that the new system plays nicely with the existing system that it will eventually be replacing.

The work with our Industrial Control Client in Germany is going really well. Phase 1 is complete and we've replaced the networking layer in one of their key pieces of software and refactored away the accumulated cruft from 30 years of maintenance. We have a shiny new testing system that we've written to help us compare the old message flow to the new message flow to ensure that we haven't changed anything that we shouldn't. This intercepts the network traffic and deblocks the messages for given test scenarios and then compares to the previous version of the code. Great for hassle free regression testing.

In summary, we're very busy doing what we love to do!

Busy, busy, busy...

We're going to be really busy for the rest of the year as we've just won a large contract with our Industrial Control Client in Germany. We'll be working on the systems that we've worked on for them before, adding new functionality and integrating The Server Framework into some applications that we haven't worked on before.

The Linux port of The Server Framework is going really well and we now have a server and client system running on Linux using our custom reliable UDP network layer. This integrates with the .Net Core integration we've been doing for the same client. The Linux work will definitely make its way into the main framework at some point; do get in touch if you're interested in this.
We're currently working on a proof of concept Linux port of one of our more complex server systems for a client. This is interesting stuff and surprisingly easy. Most of our framework code ported pretty quickly and now runs nicely on a test Ubuntu 16.04 box as well as on Windows. We're using CLion and CMake on Linux and this has provided a surprisingly familiar environment to work in. It's very early days but things look good and I expect we'll eventually do this work again properly and roll it out as part of The Server Framework. That's a long way off at present though.

We're also playing with .NET Core. The hosting story here isn't quite as neat as with normal CLR hosting but it's possible and this work meshes nicely with the Linux work.

We've just finished a nice new development of server software for a large American postal company that will remain nameless. This system deals with managing mail sorting hardware across America.

The WebRTC work rolls on and we're looking at doing a version in Go as a reference implementation before doing a C++ version for The Server Framework.

And finally, as always, we've also been working on several new releases of The Server Framework, a 6.9.2 maintenance release and continuing work on what could become massively modernised 7.0 release (which, of course, keeps slipping).

Latest release of The Server Framework: 6.9.1

Version 6.9.1 of The Server Framework was released today.

This release includes changes to support Visual Studio 2017 15.5 and some bug fixes. It's required if you're using Visual Studio 2017.

C++ Tools - Deleaker


I've just purchased a license for Deleaker by Softanics. I found out about the tool from Bartek's coding blog where he writes about the tool here.

I downloaded the trial edition and it found quite a few subtle issues in some of my unit test code. Nothing too serious, but stuff that other tools have missed. The run-time overhead doesn't appear to be that great, my server tests still run at a reasonable speed and nothing fails because of the instrumentation. My virus checker (Bitdefender) hates the tool, probably due to the code injection and whatever that's required. The developer is easy to talk to and interesting in dealing with any issues that you have.

The price is a little steep, but I got a decent discount for being a reader of Bartlomiej's blog and that helped. I'm not sure I would have purchased otherwise. At the discounted price it's a useful addition to my toolbox.

About this Blog

I usually write about C++ development on Windows platforms, but I often ramble on about other less technical stuff...

This page contains recent content. Look in the archives to find all content.

I have other blogs...

Subscribe to feed The Server Framework - high performance server development
Subscribe to feed Lock Explorer - deadlock detection and multi-threaded performance tools
Subscribe to feed l'Hexapod - embedded electronics and robotics