A lot of the custom development work that we do for our customers can be classified as developing ‘custom application servers’. Development for these kinds of servers usually requires that we design a wire-protocol for communications between the clients and the server, implement a server that either does everything that the customer requires or allows them to easily plug in their business logic and provide a client side library (or two) that makes it easy for the customer to write clients for the server.
The Server Framework makes this kind of thing reasonably straight forward; after all, it’s what it was designed for, but many customers still prefer us to do the custom development rather than doing it themselves (or sometimes after starting the development themselves). Since we’ve been doing this kind of work (with this kind of framework) for over 8 years now it’s not too surprising that we’re probably better at it (and deliver more correct and robust code more quickly) than our customer’s own development teams. This is where it’s useful for us to provide client side libraries that abstract away the details of the wire-protocol and handle all of the communication and server side ‘plugin’ architectures that allow easy development of the core business logic that our customer’s development teams understand far better than we do.
From a client side perspective we can develop anything from a simple windows DLL with a standard ‘C’ API through to COM and .Net code that allow for easier integration with the customer’s in-house development. Likewise on the server side we can create hosting servers that allow the customer’s development team to develop the business logic for their servers in C, C++, COM or .Net languages. The server deals with all the details of communicating with the clients, either via TCP, UDP or reliable UDP and optionally secured using SSL or TLS. The server also deals with decoding the wire-protocol, managing the connections and marshalling the protocol’s messages from the C++ world of the framework through to whichever flavour of ‘plugin’ your business logic is written in. We have proven systems for handling message dispatch to your business logic; hosting standard DLLs within custom thread pools or hosting the .Net runtime (CLR hosting) and dispatching from C++ to C# or another .Net language. Likewise sending data back to your clients is easy as the server deals with everything once you pass your response back out of your business logic. In some servers we pass everything off to the customer’s business logic and the server is merely acting as a high performance connection manager and protocol handler, in other designs the server may handle a percentage of the protocol messages itself and only pass to the plugins the specific messages that the customer needs to handle directly.
Many customers find it useful to be able to try a version of the the server code for free, then purchase the licensed version of the code to enable them to take advantage of the many new features that are included and to add on functionality such as .Net/CLR hosting, SSL encryption (via OpenSSL or SChannel) or performance monitoring using perfmon counters. The customer’s own development teams can then build their server and obtain support or consultancy as and when they need it or they can outsource the whole development to us. If you’re interested, get in touch.