CS 856: Assignment

This assignment is due in about TWO weeks, this is a hard deadline. You must work in groups of no fewer than X and no more than Y people, where X and Y will be determined by the size of the class.

The assignment is to implement an HTTP server that serves only static requests but does so accurately and at the highest rate possible within two weeks. It must handle and service HTTP 1.1 requests. The goal is to hopefully introduce you to some of the issues we will examine in this course. The server needs only to handle static GET requests. An introduction to how an HTTP server operates can be found here
Web Servers. Erich Nahum. Book chapter to appear, Linux Server Performance Tuning, Prentice Hall, 2004. Sandra Johnson, Ed. but be careful because much of this discussion is explaining HTTP 1.0 requests and you must handle HTTP 1.1 requests (it is not necessary for you to handle 1.0 requests) but you can if you want.

You must develop all code on your own except for the request parsing code which is provided to you and which everyone MUST use. The parsing code is available in
parse.c

You are not permitted to use code from other servers or projects written by you or anyone else.

We plan/hope to evaluate and compare the performance of all servers during class. The goal for your team should be to produce the fastest web server of all of the groups in the class.

Note that you will be rewarded more for having a server that is implemented correctly and withstands heavy workloads but runs slowly than having a potentially fast design that crashes or doesn't work correctly. For example, if you can serve 100 requests per second but your server crashes at 200 request per second your recorded speed will be 0. We will be evaluating peak server performance.

To ensure that tests can be run simply and easily you must design, implement and configure your server so that it can be started simply and easily using the following command line:

% ./httpd

When run in this mode it MUST accept incoming requests from all NICs on port 6901. Also note that the server will be running Linux.