CoralReactor supports WebSockets out-of-the-box. In this article we present a simple CoralReactor websocket client that connects to an echo websocket server.
The Echo Server
The site www.websocket.org contains a test echo server at ws://echo.websocket.org that you can use to test your websocket clients. To create a CoralReactor websocket client you just inherit from AbstractWebSocketClient
as the example below demonstrates:
package com.coralblocks.coralreactor.client.ws; import static com.coralblocks.corallog.Log.*; import java.nio.ByteBuffer; import com.coralblocks.coralreactor.client.Client; import com.coralblocks.coralreactor.nio.NioReactor; import com.coralblocks.coralreactor.util.Configuration; public class SimpleWebSocketClient extends AbstractWebSocketClient { public SimpleWebSocketClient(NioReactor nio, String host, int port) { super(nio, host, port); } public SimpleWebSocketClient(NioReactor nio, String host, int port, Configuration config) { super(nio, host, port, config); } @Override protected void handleConnectionOpened() { setEventTimeout(3000); } @Override protected void handleConnectionTerminated() { setEventTimeout(0); } @Override protected void handleEventTimeout(long now, int timeout) { send("Hello from CoralBlocks!"); if (isConnectionOpen()) setEventTimeout(timeout); } @Override protected void handleMessage(ByteBuffer msg) { Info.log(name, "Got message!", "len=", msg.remaining(), "contents=", msg); } public static void main(String[] args) throws Exception { NioReactor nio = NioReactor.create(); Client client = new SimpleWebSocketClient(nio, "echo.websocket.org", 80); client.open(); nio.start(); } }
The output:
08:20:19.308599-INFO SimpleWebSocketClient-echo.websocket.org:80 Client opened! sequence=1 08:20:19.328736-INFO NioReactor Reactor started! type=OptimumNioReactor impl=KQueueSelectorImpl 08:20:19.587244-INFO SimpleWebSocketClient-echo.websocket.org:80 Connection established! 08:20:19.616175-INFO SimpleWebSocketClient-echo.websocket.org:80 Connection opened! 08:20:22.669745-INFO SimpleWebSocketClient-echo.websocket.org:80 Got message! len=23 contents=Hello from CoralBlocks! 08:20:25.647737-INFO SimpleWebSocketClient-echo.websocket.org:80 Got message! len=23 contents=Hello from CoralBlocks! 08:20:28.666637-INFO SimpleWebSocketClient-echo.websocket.org:80 Got message! len=23 contents=Hello from CoralBlocks!
SSL Support (WSS)
CoralReactor supports SSL security out-of-the-box. You can read more about it in this article. The echo.websocket.org server also supports SSL at wss://echo.websocket.org (i.e. port 443 instead of 80). Below we show how easy it is to make the CoralReactor websocket client above use SSL:
public static void main(String[] args) throws Exception { NioReactor nio = NioReactor.create(); MapConfiguration config = new MapConfiguration(); config.add("useSSL", true); // tell CoralReactor that we want to use SSL Client client = new SimpleWebSocketClient(nio, "echo.websocket.org", 443, config); // NOTE: 443 for SSL client.open(); nio.start(); }
The output:
08:36:30.442509-INFO SimpleWebSocketClient-echo.websocket.org:443 Client opened! sequence=1 08:36:31.209797-INFO NioReactor Reactor started! type=OptimumNioReactor impl=KQueueSelectorImpl 08:36:31.401301-INFO SimpleWebSocketClient-echo.websocket.org:443 Connection established! 08:36:31.539130-INFO SimpleWebSocketClient-echo.websocket.org:443 Connection opened! 08:36:34.601468-INFO SimpleWebSocketClient-echo.websocket.org:443 Got message! len=23 contents=Hello from CoralBlocks! 08:36:37.570590-INFO SimpleWebSocketClient-echo.websocket.org:443 Got message! len=23 contents=Hello from CoralBlocks! 08:36:40.575693-INFO SimpleWebSocketClient-echo.websocket.org:443 Got message! len=23 contents=Hello from CoralBlocks!