multithreading - Java HttpsServer multi threaded -


i have set httpsserver in java. of communication works perfectly. set multiple contexts, load self-signed certificate, , start based on external configuration file.

my problem getting multiple clients able hit secure server. so, somehow multi-thread requests come in httpsserver cannot figure out how so. below basic httpsconfiguration.

  httpsserver server = httpsserver.create(new inetsocketaddress(secureconnection.getport()), 0);   sslcontext sslcontext = sslcontext.getinstance("tls");    sslcontext.init(secureconnection.getkeymanager().getkeymanagers(), secureconnection.gettrustmanager().gettrustmanagers(), null);    server.sethttpsconfigurator(new secureserverconfiguration(sslcontext));   server.createcontext("/", new roothandler());   server.createcontext("/test", new testhandler());   server.setexecutor(executors.newcachedthreadpool());   server.start(); 

where secureconnection custom class containing server setup , certificate information.

i attempted set executor executors.newcachedthreadpool() , couple of other ones. however, produced same result. each managed threads differently first request had finish before second process.

i tried writing own executor

public class asyncexecutor extends threadpoolexecutor implements executor {    public static executor create()    {       return new asyncexecutor();    }     public asyncexecutor()    {       super(5, 10, 10000, timeunit.seconds, new arrayblockingqueue<runnable>(12));    }     @override    public void execute(runnable process)    {       system.out.println("new process");        thread newprocess = new thread(process);       newprocess.setdaemon(false);        newprocess.start();        system.out.println("thread created");    } } 

unfortunately, same result other executors.

to test using postman hit /test endpoint simulating long running task doing thread.sleep(10000). while running, using chrome browser hit root endpoint. root page not load until 10 second sleep over.

any thoughts on how handle multiple concurrent requests https server?

for ease of testing, replicated scenario using standard httpserver , condensed single java program.

import java.io.ioexception; import java.io.outputstream; import java.net.inetsocketaddress; import java.util.concurrent.executors;  import com.sun.net.httpserver.httpexchange; import com.sun.net.httpserver.httphandler; import com.sun.net.httpserver.httpserver;  public class example {    private final static int port = 80;    private final static int backlog = 10;     /**     * test hit:     * <p><b>http://localhost/test</b></p>     * <p>this hit endoint thread sleep<br>     * hit:</p>     * <p><b>http://localhost</b></p>     * <p>i expect come right away. however, not come until     * first request finishes. can tested basic browser.</p>     * @param args     * @throws exception     */    public static void main(string[] args) throws exception    {       new example().start();    }     private void start() throws exception    {       httpserver server = httpserver.create(new inetsocketaddress(port), backlog);        server.createcontext("/", new roothandler());       server.createcontext("/test", new testhandler());       server.setexecutor(executors.newcachedthreadpool());       server.start();        system.out.println("server started on " + port);    }     class roothandler implements httphandler    {       @override       public void handle(httpexchange httpexchange) throws ioexception       {          string body = "<html>hello world</html>";           httpexchange.sendresponseheaders(200, body.length());          outputstream outputstream = httpexchange.getresponsebody();           outputstream.write(body.getbytes("utf-8"));          outputstream.close();       }    }     class testhandler implements httphandler    {       @override       public void handle(httpexchange httpexchange) throws ioexception       {          try          {             thread.sleep(10000);          }          catch (interruptedexception e)          {             e.printstacktrace();          }           string body = "<html>test handled</html>";           httpexchange.sendresponseheaders(200, body.length());          outputstream outputstream = httpexchange.getresponsebody();           outputstream.write(body.getbytes("utf-8"));          outputstream.close();       }    } } 

try specifying non-zero maximum backlog (the second argument create()):

httpsserver server = httpsserver.create(new inetsocketaddress(secureconnection.getport()), 10); 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -