*The low-level HTTP API provides access to the extremely fast Rapidoid HTTP
server implemented from scratch on top of Java NIO.*
Thats quite an achievement, considering that Netty is very well optimized. Maybe the off-heap output buffer gives it that edge?The performance optimization is based on: - using off-heap input and output buffers, - minimizing the number of objects that are created when parsing the input and generating the output, - using object pools to reuse the objects that must be created, - using thread-local helper data structures on the I/O threads to avoid synchronization and object instantiation.
Is this because it allows the GC to be avoided, or because it allows value types to be emulated?
Lots of people have done so, if you have the skills and determination. It also helps if you focus on that, instead of completeness, like Netty probably does.
(Netty is well-optimized, but quite bloated as well).
Rapidoid reminds me a little bit the Spark Framework (not Apache Spark, very unlucky name, though) which I use for fast prototyping and services.
http://www.ninjaframework.org/
But the leader of the recent Java web frameworks really seem to be Vert.x ( http://vertx.io/ ) which I have started to use recently and like a lot so far.
I am surprised that I hadn't heard of Rapidoid before. +1 to HN
Love the easy, clean API - it's great for a reasonably sized project.
If you have to recompile every time you change something, you're going to have a baaad time.
Github link https://github.com/rapidoid/rapidoid
You also forgot to mention what I need to import in order to have the "On" object.
Maybe you can include something like this template on your getting started page.
import org.rapidoid.http.fast.*;
// wget https://repo.maven.apache.org/maven2/org/rapidoid/rapidoid-http-fast/5.0.7/rapidoid-http-fast-5.0.7.jar
public class App
{
public static void main (String[] args)
{
On.get ("/size").json ("msg", msg -> msg.length ());
}
}
Also needed would be a sample pom.xml file. I had a problem with java compiler version being older and unable to complie lambdas.My sample pom.xml (feel free to use it if you like) is:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.microservices.app</groupId>
<artifactId>rest-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>rest-app</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.rapidoid</groupId>
<artifactId>rapidoid-web</artifactId>
<version>5.0.5</version>
</dependency>
</dependencies>
</project>
Then I can run the test service using: java -cp target/rest-app-1.0-SNAPSHOT-jar-with-dependencies.jar AppI totally agree a tutorial like this is needed, and I am going to add such documentation soon...
The point was that if a new framework aims to capture enough attention and traction to be a sustainable alternative to the incumbents it has to support websocket .
The only part I think where websockets enable truly new functionality is displaying of live data and push notifications.
You'd really be surprised. Not everybody moves or even has a use case for a websocket-based backend.