I
conceived a set of test files to depict each of the EIA scenarios
mentioned. These files were transferred
between a client and server and timings were made for each transfer. In this implementation, the client and
server applications share the same code and are distinguished by a command-line
switch.
Each
transport implements the ICourseContentTransport interface. This interface is used to abstract away the
differences among the various transports.
The interface contains such methods as Connect(), Disconnect(),
ReceiveFirstContent(), ReceiveNextContent(), etc. Each transport (e.g., RMICourseContentTransport) implements the
abstract interface so the test program can simply run through the available
transports and test them in exactly the same way.
In
implementing the SocketCourseContentTransport(), which sends and receives
content via TCP/IP sockets, I made certain to serialize the content using the
standard Java serialization mechanism.
I had read previously that Java's serialization mechanism had
performance concerns of its own, and I didn't want to unduly penalize the RMI
transport by using a different serialization mechanism when comparing. Thus, I avoided this issue by using the same
serialization mechanism in all tested transports.
Each
transport was tested using a set of files in directories, which denoted the
respective scenarios. This allowed me
to change the existing scenarios and add new ones easily throughout the
development process.