Prefácio:
Esta é uma maneira simples de implementar o WebSocket em um servlet Java com servidor Tomcat.
Requisitos:
- Tomcat 7.x
- Java J2EE (eu uso a versão 7 …)
- Exemplo de arquivo: WSTest / ws.java
Código:
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
/*
* @WebServlet indicates the url of this file (ex: localhost:8080/WSTest/ws)
*/
@WebServlet("/ws")
public class ws extends WebSocketServlet{
private static final long serialVersionUID = 1L;
@Override
public StreamInbound createWebSocketInbound(String arg0, HttpServletRequest arg1) {
/*
* arg1.getRemoteAddr() return the ip address (v4 or v6) of the client
*/
return new WebSocket(arg1.getRemoteAddr());
}
/*
* The WebSocket class!!! :D
* protected* is for testing with JUnit
*/
protected class WebSocket extends MessageInbound{
/*
* Client stream reference.
*/
private WsOutbound outbound;
/*
* Client IP reference.
*/
private String ip;
/*
* Costructor
* @param ipAddress
* Client ip (v4 or v6).
*/
protected WebSocket(String ipAddress){
ip = ipAddress;
}
/*
* Message sender.
* @param m
* message to client.
*/
private void sendMessage(String m){
try{
outbound.writeTextMessage(CharBuffer.wrap((m).toCharArray()));
}
catch(IOException ioException){
System.out.println("error opening websocket");
}
}
/*
* Client open channel.
* @param o
* Client stream reference.
*/
@Override
public void onOpen(WsOutbound o){
this.outbound = o;
System.out.println("socket opened!");
}
/**
* Client send a char stream to server.
* @param buffer
* Message buffer.
*/
@Override
public void onTextMessage(CharBuffer buffer) throws IOException{
/**
* What do you do when client send a message to server.
*/
}
/**
* Client send a byte stream to server.
* @param buffer
* Byte buffer.
*/
@Override
public void onBinaryMessage(ByteBuffer buffer) throws IOException {
/**
* What do you do when client send a byte stream to server.
*/
}
} //WebSocket
}//ws