Scala - hosting a websocket server using Atmosphere/Nettosphere

Websockets are one of the means to push data from a backend application to a web application running in the browser. In this post, we will look at hosting a web socket server within a java/scala application using Atmosphere/Nettosphere. Atmosphere is an asynchronous application development framework that allows development of realtime applications.

Shown below is the scala code that launches a websocket server on localhost at 8080. When the application starts, Atmosphere scans the classpath to locate relevant resources that could be loaded as handlers. In this case, it finds the WebSocketChat class which has the attribute "WebSocketHandlerService". This handler is made to handle incoming websocket requests at the path "/echo".

For this to work, the build.sbt should be modified to include the dependencies.

Once the application is up and running, you will be able to connect to it using regular WebSocket clients. For example, shown below is a simple html file that connects to the websocket we just launched and pings to it.

You can look at the javascript console in the development tools of the browser to look at the output. Note that you have to wait for the socket to be connected before you can actually make the "send()" call. So in our example, I make a send() call from the "onopen" handler of the websocket.

I have some plans on using this to build some webparts based system that you can use to monitor observables remotely....more on it later.