October 2010
-
:
Welcome to ServerFramework.com
ServerFramework.com is a new website that we’ve put together to make it easier for users and potential users of the licensed version of our high performance, I/O completion port based client/server socket framework to find all of the … -
:
An introduction to WASP
WASP is, at heart, simply another example server for The Server Framework, but it’s also something a little new. Up until now potential clients have been able to look at the example servers source code and ask for pre-built … -
:
Latest release of The Server Framework: 6.3
Version 6.3 of The Server Framework was released today. This release includes the following, see the release notes, here, for full details of all changes. Performance improvements on Vista and later operating systems. See here for more … -
:
Getting started with WASP
The easiest way to get started with WASP is to download the latest version from the download page, here, unzip the contents somewhere and then run the WASP executable, simply double click the executable in Explorer or navigate to the … -
:
Changes to the Service Tools library in 6.3
The development of WASP has been acting as a bit of an internal driver for new feature development in the 6.3 release of The Server Framework. Sitting down to develop a service that was easy to use for a mass market exposed some small holes … -
:
Checking for new versions of WASP
I’ve got quite a few plans for expanding the functionality that WASP provides. Ideally it should showcase all of the major options available with The Server Framework; so pretty soon I’ll be adding UDP support, hosting plugins … -
:
Running WASP as a Windows Service
In the last tutorial I showed you how to run WASP as a normal command line executable. This can be useful for testing and development and also for debugging but when you want to run WASP on a production machine you probably want to run it … -
:
Changes to the CLR Hosting Tools library in 6.3
One of my clients has recently required .Net 4.0 hosting support and so most of the changes in the CLR Hosting Tools library in 6.3 have been driven by them. The main new feature is the optional use of the .Net 4.0 hosting API. This allows … -
:
Enabling and viewing WASP's performance counters
WASP can expose internal metrics using performance counters. These can then be viewed using the standard Windows performance monitoring tool, perfmon. WASP’s performance counters allow you to see how your server is performing and the … -
:
Automating WASP installation
As you will have noticed if you’ve been following along with the tutorials, WASP displays a message box when you successfully install an instance of the service or install the performance counters. This is less than ideal for … -
:
The simplest plugin, examining EchoServer.dll
WASP plugins are, at present, native DLLs that expose a set of known entry points. The minimal plugin exposes a single entry point, either OnReadCompleted() or OnReadCompletedEx(). The entry points and other details that you need to build a … -
:
Message framing, a length prefixed packet echo server
Most TCP servers deal with distinct messages whereas TCP itself deals in terms of a stream bytes. By default a single read from a TCP stream can return any number of bytes from 1 to the size of the buffer that you supplied. TCP knows … -
:
Stress testing WASP using the EchoServerTest program
The simple echo server plugin that we developed in the earlier tutorial was easy to test using telnet as it simply echoed all data back to the client. The plugin which used simple message framing was less easy to test using telnet as you … -
:
Using OpenSSL with Asynchronous Sockets
OpenSSL is an open source implementation of the SSL and TLS protocols. Unfortunately it doesn’t play well with windows style asynchronous sockets. This article - previously published in Windows Developer Magazine and now available on … -
:
WASP's thread pools
Way back in 2002 when I was developing ISO8583 servers for PayPoint I put together a two thread pool server design that has worked so well that many of the servers that I develop today still use variations on the original design. The main … -
:
Some thoughts on that two thread pool server design
I’m currently re-reading “High Performance Server Architecture” by Jeff Darcy and he has a lot of sensible stuff to say about avoiding context switches and how my multiple thread pool design, whilst conceptually good is … -
:
Calling WASP functions from your plugin DLL.
So far our simple example WASP plugins have all used OnReadCompletedEx() which gives you both an input and an output buffer and assumes that you generate a single response to each inbound message. It also assumes that you wont write more … -
:
Testing complex server code
As I mentioned in the release notes for v6.3 here, I’ve added some code to prevent potential recursion issues if certain performance improvements are enabled. In Windows Vista and later it’s possible to set the … -
:
WASP Server instances
A single WASP plugin can be loaded by multiple end points to provide the same server on multiple ports. A plugin could, for example, be configured on one end point to provide services to the internal network and on another end point to … -
:
WASP plugin entry points
By now you’ve probably taken a look inside of the WASP SDK header, WASPDLLEntryPoints.h and seen all of the various plugin entry points that you can export from your plugin. This tutorial will explain what each of them is for and how … -
:
WASP's config file
As you have discovered if you’ve been following the tutorials, WASP is configured using an XML file. This file can either live in the same directory as the WASP executable or, for when you’re running WASP as a Windows Service, … -
:
More complex message framing
So far the tutorials have focused on a simple length prefixed message type. This is probably the easiest message in the world to process, the message framing is very simple and there’s hardly anything to do in your message framing … -
:
WASP command line options
As you’ve seen from some of the earlier tutorials, WASP has quite a few command line parameters that can change how it runs. You can run WASP as a normal executable or install it as a Windows Service. The complete set of command line … -
:
How to support 10,000 or more concurrent TCP connections
Using a modern Windows operating system it’s pretty easy to build a server system that can support many thousands of connections if you design the system to use the correct Windows APIs. The key to server scalability is to always keep … -
:
How to support 10,000 or more concurrent TCP connections - Part 2 - Perf tests from Day 0
As I mentioned last time, supporting a large number of concurrent connections on a modern Windows operating system is reasonably straight forward if you get your initial design right; use an I/O Completion Port based design, minimise …