Mercurial Hosting > luan
annotate src/luan/webserver/Server.java @ 1175:d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Feb 2018 14:55:28 -0700 |
parents | 0f59eab45f3d |
children | 79b1e9ffd0c0 |
rev | line source |
---|---|
1137 | 1 package luan.webserver; |
2 | |
3 import java.io.IOException; | |
4 import java.net.Socket; | |
5 import java.net.ServerSocket; | |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
6 import java.net.InetAddress; |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
7 import java.util.concurrent.ExecutorService; |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
8 import java.util.concurrent.Executors; |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
9 import java.util.concurrent.TimeUnit; |
1137 | 10 import org.slf4j.Logger; |
11 import org.slf4j.LoggerFactory; | |
12 | |
13 | |
14 public class Server { | |
15 private static final Logger logger = LoggerFactory.getLogger(Server.class); | |
16 | |
17 public final int port; | |
18 public final Handler handler; | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
19 private static final ExecutorService exec = Executors.newCachedThreadPool(); |
1137 | 20 |
21 public Server(int port,Handler handler) { | |
22 this.port = port; | |
23 this.handler = handler; | |
24 } | |
25 | |
26 protected ServerSocket newServerSocket() throws IOException { | |
27 return new ServerSocket(port); | |
28 } | |
29 | |
30 public synchronized void start() throws IOException { | |
31 final ServerSocket ss = newServerSocket(); | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
32 exec.execute(new Runnable(){public void run() { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
33 try { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
34 while(!exec.isShutdown()) { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
35 final Socket socket = ss.accept(); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
36 exec.execute(new Runnable(){public void run() { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
37 Connection.handle(Server.this,socket); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
38 }}); |
1137 | 39 } |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
40 } catch(IOException e) { |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
41 logger.error("",e); |
1137 | 42 } |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
43 }}); |
1137 | 44 logger.info("started server on port "+port); |
45 } | |
46 | |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
47 public synchronized boolean stop(long timeoutSeconds) { |
1137 | 48 try { |
1142
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
49 exec.shutdownNow(); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
50 boolean stopped = exec.awaitTermination(timeoutSeconds,TimeUnit.SECONDS); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
51 if(stopped) |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
52 logger.info("stopped server on port "+port); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
53 else |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
54 logger.warn("couldn't stop server on port "+port); |
0f59eab45f3d
webserver - threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
1138
diff
changeset
|
55 return stopped; |
1137 | 56 } catch(InterruptedException e) { |
57 throw new RuntimeException(e); | |
58 } | |
59 } | |
60 | |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
61 public static class Local extends Server { |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
62 public Local(int port,Handler handler) { |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
63 super(port,handler); |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
64 } |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
65 |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
66 protected ServerSocket newServerSocket() throws IOException { |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
67 return new ServerSocket(port,0,InetAddress.getByName("127.0.0.1")); |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
68 } |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1142
diff
changeset
|
69 } |
1137 | 70 } |