Vibe Java Server A is a simple B, scalable C Java server designed to run any framework or platform on Java Virtual Machine D.
- A
- Vibe 3.0.0-Alpha3 server.
- B
- All interface you need to know is
Server
andServerSocket
. Indeed. - C
- Shared nothing architecture is adopted to help scale application horizontally with ease.
- D
- Because it is built on Vibe Java Platform which is I/O abstraction layer, you can run your application on any platform that it supports seamlessly e.g. Play, Vert.x, Atmosphere and Servlet.
Quick Start
Vibe Java Server is distributed through Maven Central. A single artifact, org.atmosphere:vibe-server:3.0.0-Alpha5
, is enough for general purpose and thanks to Vibe Java Platform, your application can run on any framework or platform it supports.
<dependencies>
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>vibe-server</artifactId>
<version>3.0.0-Alpha5</version>
</dependency>
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>vibe-platform-server-atmosphere2</artifactId>
<version>3.0.0-Alpha6</version>
</dependency>
</dependencies>
Once you've set up the build, you will be able to write the following echo and chat server that can run on Servlet containers Atmosphere 2 supports i.e. Tomcat, Jetty and so on.
import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import org.atmosphere.cpr.ApplicationConfig;
import org.atmosphere.vibe.platform.*;
import org.atmosphere.vibe.platform.server.*;
import org.atmosphere.vibe.platform.server.atmosphere2.VibeAtmosphereServlet;
import org.atmosphere.vibe.server.*;
@WebListener
public class Bootstrap implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
Server server = new DefaultServer();
server.socketAction(new Action<ServerSocket>() {
@Override
public void on(final ServerSocket socket) {
socket.closeAction(new VoidAction() {
@Override
public void on() {
System.out.println("on close event");
}
});
socket.errorAction(new Action<Throwable>() {
@Override
public void on(Throwable error) {
System.out.println("on error event");
error.printStackTrace();
}
});
socket.on("echo", new Action<Object>() {
@Override
public void on(Object data) {
socket.send("echo", data);
}
});
socket.on("chat", new Action<Object>() {
@Override
public void on(Object data) {
server.all().send("chat", data);
}
});
}
});
ServletContext context = event.getServletContext();
ServletRegistration.Dynamic reg = context.addServlet(VibeAtmosphereServlet.class.getName(), new VibeAtmosphereServlet() {
@Override
protected Action<ServerHttpExchange> httpAction() {
return server.httpAction();
}
@Override
protected Action<ServerWebSocket> wsAction() {
return server.wsAction();
}
});
reg.setAsyncSupported(true);
reg.setInitParameter(ApplicationConfig.DISABLE_ATMOSPHEREINTERCEPTOR, Boolean.TRUE.toString());
reg.addMapping("/vibe");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
Further Reading
- To play something right now, start with archetype example on your favorite platform.
- To take a brief look at API, check out the testee.
- To get details of API, see API document.
- To have a thorough knowledge of the implementation, read out the reference.