6 ms·
I wonder if someone can recommend a lightweight http server library? I like Javalin but it's based on Jetty which is a fully JavaEE compliant framework and incl
by spuz 5y ago
I wonder if someone can recommend a lightweight http server library? I like Javalin but it's based on Jetty which is a fully JavaEE compliant framework and includes support for things like OSGI which I don't need. With the whole Log4j situation, I'm re-evaluating some the libraries I've previously relied on.
- mooreds 5y agoWe looked around since we wanted to move off Tomcat and decided on Netty: https://netty.io/ https://netty.io/ I'm not on the engineering team so can't speak to the cost/benefit, but it seems to have been a pretty successful transition.
- winrid 5y agoEDIT - it seems maybe I was wrong here Netty copies the response body when sending to each client, so it's not as lightweight as I've found. For streaming large response bodies, it does not work well. I haven't found a good Java alternative yet (probably will switch to C++ and uWS...)
- WatchDog 5y agoNetty core is about as close to the metal as networking gets on the JVM. It's abstractions are built over a zero-copy capable byte buffer, and there is generally a lot of care taken to avoid copying where possible. I haven't used the websocket codec, but I'm sure the maintainers would welcome a patch that removes unnecessary copying.
- deleted 5y ago[deleted]
- winrid 5y agoHere's what I was thinking of, under "Vert.x Memory Usage": https://www.tikalk.com/posts/2018/04/30/vertx-memory-usage-with-intensive-network/ https://www.tikalk.com/posts/2018/04/30/vertx-memory-usage-w... Quote: "But how does Netty do things so fast ? One of the reasons is that it is using native memory pool to store network buffers. If you did some file reading or network action with Vert.x you probably used io.vertx.core.buffer.Buffer class. This class is actually a wrapper around Netty io.netty.buffer.ByteBuf class. Why am I telling you all this ? Let assume that you have a service where clients are downloading 20Mbyte files. Netty will have to allocate at least 20Mbyte for every connected client." Although this may be an issue with how Vert.x is using Netty. I have to dig into it more.
- WatchDog 5y agoFWIW, here is a fairly minimal example[0] of broadcasting over websockets reusing the same buffer. I'm not very familiar with vert.x(not a netty expert either), but I think the author of that article is ascribing blame to the wrong place. [0]: https://github.com/juggernaut/netty-websocket-broadcast-example/blob/master/src/main/java/co/leanjava/pubsub/WebSocketMessageHandler.java https://github.com/juggernaut/netty-websocket-broadcast-exam...
- winrid 5y agoNot using websockets, but thanks! I have to look into it again. Right now the service is working fine so I haven't been motivated to work on it again. (in-memory CDN based on vertx-web + Caffeine + custom on-disk LRU cache)
- mycall 5y ago> zero-copy capable byte buffer This is similar to .NET Standard 2.1 Span<T>?
- pabl0rg 5y agoIf you’re on Kotlin, consider http4k It can use netty, undertow, and others under the hood
- bullen 5y agohttps://github.com/tinspin/rupy https://github.com/tinspin/rupy
- 14u2c 5y agoVert.x It's built on top of Netty but has some additional niceties that make it more practical to use. It's also one of the fastest things out there: https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=composite https://www.techempower.com/benchmarks/#section=data-r18&hw=...
- AmpsterMan 5y agoIf you have Java 11+ I presume you can't get any simpler than a standard library module: https://docs.oracle.com/en/java/javase/17/docs/api/jdk.httpserver/module-summary.html https://docs.oracle.com/en/java/javase/17/docs/api/jdk.https...
- nayuki 5y agoThis comes from way before SE 11. I was using it in 7. The doc says it comes from 6. https://docs.oracle.com/javase/7/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html https://docs.oracle.com/javase/7/docs/jre/api/net/httpserver...
- AmpsterMan 5y agoOh neat. I erroneously thought it might have come in part with the http module in 11.
- vips7L 5y agoThat server is no where near production ready.
- dopidopHN 5y agoOkHTTP or netty.
- inyorgroove 5y agoVery Sinatra like: https://sparkjava.com/ https://sparkjava.com/
- xmodem 5y agoalso not actively maintained sadly.
- vbezhenar 5y agohttps://github.com/NanoHttpd/nanohttpd https://github.com/NanoHttpd/nanohttpd A bit outdated and not actively maintained, but it's truly small. If you like async stuff, take a loot at Helidon.