|
Alan Kaminsky
|
|
•
|
|
Department of Computer Science
|
|
•
|
|
Rochester Institute of Technology
|
|
•
|
|
4486 +
2220 =
6706
|
|
Home Page
|
Simulation Simplified
16. A Web Server
Class WebServer01
import edu.rit.numeric.ExponentialPrng;
import edu.rit.sim.Event;
import edu.rit.sim.Simulation;
import edu.rit.util.Random;
import java.util.LinkedList;
public class WebServer01
{
private static double lambda;
private static double mu;
private static int R;
private static long seed;
private static Random prng;
private static ExponentialPrng requestPrng;
private static ExponentialPrng serverPrng;
private static LinkedList<Request> requestQueue;
private static int requestCount;
private static Simulation sim;
public static void main
(String[] args)
{
if (args.length != 4) usage();
lambda = Double.parseDouble (args[0]);
mu = Double.parseDouble (args[1]);
R = Integer.parseInt (args[2]);
seed = Long.parseLong (args[3]);
prng = Random.getInstance (seed);
requestPrng = new ExponentialPrng (prng, lambda);
serverPrng = new ExponentialPrng (prng, mu);
requestQueue = new LinkedList<Request>();
requestCount = 0;
sim = new Simulation();
generateRequest();
sim.run();
}
private static class Request
{
private int requestNumber;
public Request
(int requestNumber)
{
this.requestNumber = requestNumber;
}
public String toString()
{
return "Request " + requestNumber;
}
}
private static void generateRequest()
{
addToQueue (new Request (++ requestCount));
if (requestCount < R)
{
sim.doAfter (requestPrng.next(), new Event()
{
public void perform() { generateRequest(); }
});
}
}
private static void addToQueue
(Request request)
{
System.out.printf ("%.3f %s added to queue%n",
sim.time(), request);
requestQueue.add (request);
if (requestQueue.size() == 1) startServing();
}
private static void startServing()
{
System.out.printf ("%.3f Started serving %s%n",
sim.time(), requestQueue.getFirst());
sim.doAfter (serverPrng.next(), new Event()
{
public void perform() { removeFromQueue(); }
});
}
private static void removeFromQueue()
{
System.out.printf ("%.3f %s removed from queue%n",
sim.time(), requestQueue.removeFirst());
if (requestQueue.size() > 0) startServing();
}
private static void usage()
{
System.err.println
("Usage: java WebServer01 <lambda> <mu> <R> <seed>");
System.exit (1);
}
}
|
Alan Kaminsky
|
|
•
|
|
Department of Computer Science
|
|
•
|
|
Rochester Institute of Technology
|
|
•
|
|
4486 +
2220 =
6706
|
|
Home Page
|
Copyright © 2011 Alan Kaminsky.
All rights reserved.
Last updated 31-Aug-2011.
Please send comments to ark@cs.rit.edu.