Websocket Basic Tutorial
Server Browser 2-way communication
package com.itsallbinary.tutorial.websocket;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
/**
* Indicates that this class is a websocket endpoint with URL "/server-endpoint"
*/
@ServerEndpoint("/server-endpoint")
public class MyWebSocketEndpoint {
/**
* Container calls this method when browser connects to this endpoint.
*/
@OnOpen
public void onOpen(Session session) {
System.out.println("Session Open [" + session.getId() + "]");
// Start a separate thread which will send messages back to browser.
new Thread(new ServerToBrowserMessageSender(session)).start();
}
/**
* Container calls this method when websocket connection is closed by browser or
* server.
*/
@OnClose
public void onClose(Session session) {
System.out.println("Session Close [" + session.getId() + "]");
}
/**
* Process message received from browser.
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("Message received [" + session.getId() + "] Message=" + message);
}
/**
* Container calls this method when there is an error in websocket
* communication.
*/
@OnError
public void onError(Throwable t) {
System.out.println("Error - " + t.getMessage());
}
}
/**
* This is a custom thread which sends message to browser every 2000
* milliseconds.
*/
class ServerToBrowserMessageSender extends Thread {
private int count = 0;
private Session session;
public ServerToBrowserMessageSender(Session session) {
this.session = session;
}
@Override
public void run() {
while (count < 5) {
count++;
try {
// Send message to browser ever 2000 milliseconds.
Thread.sleep(2000);
session.getBasicRemote()
.sendText("[Server -> Browser] A Message from server to browser. Count = " + count);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}