2014-10-20 185 views
0

我创建了一个工作正常的简单客户端 - 服务器应用程序。 服务器正在侦听端口,然后启动该作业的线程。 目前唯一的方法(在IDE之外)是杀死java.exe来停止服务器。 这两个示例类都非常精简。如何在Windows上启动服务器应用程序

主类:

public static void main(String[] args) { 
    MultiThreadedServer server = new MultiThreadedServer(9000); 
    new Thread(server).start(); 
} 

MultiThreadedServer类:

public class MultiThreadedServer implements Runnable { 

    protected int serverPort = 9000; 
    protected ServerSocket serverSocket = null; 
    protected Thread runningThread = null; 
    protected ExecutorService threadPool = Executors.newFixedThreadPool(Options.getInstance().getThreadCount()); 

    public MultiThreadedServer(int port) { 
    this.serverPort = port; 
    } 

    public void run() { 
    synchronized (this) { 
     this.runningThread = Thread.currentThread(); 
    } 
    openServerSocket(); 
    while (true) { 
     Socket clientSocket; 
     try { 
     clientSocket = this.serverSocket.accept(); 
     } catch (IOException e) { 
     throw new RuntimeException("Error accepting client connection", e); 
     } 

     try { 
     this.threadPool.execute(new WorkerRunnable(clientSocket, Constants.appName + " Thread")); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

    private void openServerSocket() { 
    try { 
     this.serverSocket = new ServerSocket(this.serverPort); 
    } catch (IOException e) { 
     throw new RuntimeException("Cannot open port " + serverPort, e); 
    } 
    } 
} 

我想知道,什么是启动服务器应用程序的最佳做法是什么?

回答

0

我已经解决了我自己的问题。 我创建了一个windows批处理脚本,它处理一些预先需求并启动服务器应用程序。 并与nssm nssm我已经将此批处理文件安装为Windows服务。不是服务器应用程序可以由Windows服务控制。

相关问题