I created the ServerState object out of a simple dictionary. If you want more sophisticated caching capabilities then ServerState could use the
Memory cache class or link to a more sophisticated caching system like the AppFabric caching service or Redis. It you want to scope objects to a particular user then you would use some kind of user identifier as prefix on the cache key.

Just be careful with using this type of caching. As LJD said in many cases using regular HTTP caching can be a much better way to reduce server load.