Class NetworkServer
- java.lang.Object
-
- com.sun.akuma.Daemon
-
- com.sun.akuma.NetworkServer
-
- Direct Known Subclasses:
EchoServer
public abstract class NetworkServer extends Daemon
Multi-process network server that accepts connections on the same TCP port.This class lets you write a Unix-like multi-process network daemon. The first process acts as the frontend. This creates a new socket, then fork several worker processes, which inherits this socket.
Worker threads will all accept connections on this port, so even when one of the worker processes die off, your clients won't notice that there's a problem.
The user of this class needs to override this class and implement abstract methods. Several protected methods can be also overridden to customize the behaviors. See
EchoServersource code as an example.This class also inherits from
Daemonto support the daemonization.From your main method, call into
run()method. Depending on whether the current process is started as a front end or a worker process, the run method behave accordingly.- Author:
- Kohsuke Kawaguchi
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.sun.akuma.Daemon
Daemon.WithoutChdir
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<java.lang.String>argumentsJava arguments.
-
Constructor Summary
Constructors Modifier Constructor Description protectedNetworkServer(java.lang.String[] args)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract java.net.ServerSocketcreateServerSocket()Creates a boundServerSocketthat will be shared by all worker processes.protected abstract voidforkWorkers(JavaVMArguments args)Forks the worker thread with the given JVM args.protected voidforkWorkerThreads(JavaVMArguments arguments, int n)Called by the front-end code to fork a number of worker processes into the background.protected voidfrontend()Front-end.voidrun()Entry point.protected booleanshouldBeDaemonized()Determine if we should daemonize ourselves.protected voidworker()protected abstract voidworker(java.net.ServerSocket ss)Worker thread main code.-
Methods inherited from class com.sun.akuma.Daemon
all, chdirToRoot, closeDescriptors, daemonize, daemonize, getCurrentExecutable, init, init, isDaemonized, selfExec, writePidFile
-
-
-
-
Method Detail
-
run
public void run() throws java.lang.ExceptionEntry point. Should be called from your main method.- Throws:
java.lang.Exception
-
shouldBeDaemonized
protected boolean shouldBeDaemonized()
Determine if we should daemonize ourselves.
-
frontend
protected void frontend() throws java.lang.ExceptionFront-end.- Throws:
java.lang.Exception
-
forkWorkers
protected abstract void forkWorkers(JavaVMArguments args) throws java.lang.Exception
Forks the worker thread with the given JVM args. The implementation is expected to modify the arguments to suit their need, then call intoforkWorkerThreads(JavaVMArguments, int).- Throws:
java.lang.Exception
-
forkWorkerThreads
protected void forkWorkerThreads(JavaVMArguments arguments, int n) throws java.lang.Exception
Called by the front-end code to fork a number of worker processes into the background. This method never returns.- Throws:
java.lang.Exception
-
createServerSocket
protected abstract java.net.ServerSocket createServerSocket() throws java.lang.ExceptionCreates a boundServerSocketthat will be shared by all worker processes. This method is called in the frontend process.- Throws:
java.lang.Exception
-
worker
protected void worker() throws java.lang.Exception- Throws:
java.lang.Exception
-
worker
protected abstract void worker(java.net.ServerSocket ss) throws java.lang.ExceptionWorker thread main code.- Parameters:
ss- The server socket that the frontend process created.- Throws:
java.lang.Exception
-
-