robaho / httpserver

a lightweight zero dependency JDK http server implementation designed for embedding and optimized for virtual threads

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

httpserver

A simple http server designed for embedding based on the JDK sun.net.httpserver - only a 90kb jar.

It adds websocket support using modified source from nanohttpd.

All async functionality has been removed. Most synchronized blocks were removed in favor of other Java concurrency concepts.

The end result is an implementation that easily integrates with Virtual Threads available in JDK 21 - simply set a virtual thread based ExecutorService.

background

The JDK httpserver has no support for connection upgrades, so it is not possible to add websocket support.

Additionally, the code still has a lot of async - e.g. using SSLEngine to provide SSL support - which makes it more difficult to understand and enhance.

The streams based processing offered by a thread per connection design simplifies the code substantially.

testing

Nearly all of the tests were migrated from the JDK so the current version should be highly compliant.

using

Set the default HttpServer provider when starting the jvm:

-Dcom.sun.net.httpserver.HttpServerProvider=robaho.net.httpserver.DefaultHttpServerProvider

or instantiate the server directly using this.

or the service loader should now automatically find it when on the class path.

maven

<dependency>
  <groupId>io.github.robaho</groupId>
  <artifactId>httpserver</artifactId>
  <version>1.0.3</version>
</dependency>

future work

There is no http2 support.

About

a lightweight zero dependency JDK http server implementation designed for embedding and optimized for virtual threads

License:Other


Languages

Language:Java 100.0%