websocket.server.RandomResponseGenerator.java

package websocket.server;import io.netty.channel.ChannelHandlerContext;import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;import java.util.Random;import org.apache.log4j.Logger;public class RandomResponseGenerator extends Thread{	private ChannelHandlerContext ctx;		private Random random = new Random();		private int messageCount = 10;		public RandomResponseGenerator(ChannelHandlerContext ctx){		this.ctx=ctx;	}		private Logger logger = Logger.getLogger(RandomResponseGenerator.class);		public void run() {		while(messageCount-->0){			ctx.writeAndFlush(new TextWebSocketFrame("[server] the random value is : "+random.nextInt(20)));						try {				Thread.sleep(1000);			} catch (InterruptedException e) {				logger.error("encounter an exception",e);			}		}	}}

websocket.server.HttpRequestHandler.java

package websocket.server;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.handler.codec.http.FullHttpRequest;import org.apache.log4j.Logger;public class HttpRequestHandler extends SimpleChannelInboundHandler
 {        private final String wsUri;        public HttpRequestHandler(String wsUri) {        this.wsUri = wsUri;    }        private Logger logger = Logger.getLogger(HttpRequestHandler.class);        @Override    protected void channelRead0(final ChannelHandlerContext ctx, FullHttpRequest msg)            throws Exception {             if(wsUri.equalsIgnoreCase(msg.getUri())){         logger.info("a websocket connection established ... ");         logger.info("the request uri is : "+msg.getUri());                  new RandomResponseGenerator(ctx).start();                     ctx.fireChannelRead(msg.retain());        }    }}

websocket.server.TextWebSocketFrameHandler.java

package websocket.server;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;import org.apache.log4j.Logger;public class TextWebSocketFrameHandler extends SimpleChannelInboundHandler
 {        private Logger logger = Logger.getLogger(TextWebSocketFrameHandler.class);        @Override    protected void channelRead0(ChannelHandlerContext ctx,            TextWebSocketFrame msg) throws Exception {     String message = msg.content().toString(io.netty.util.CharsetUtil.UTF_8);     logger.info("receive below information from client:\n"+message);          ctx.writeAndFlush(new TextWebSocketFrame("[server] receive message ["+message+"] successfully"));    }}

websocket.server.WebSocketServerInitializer.java

package websocket.server;import io.netty.channel.Channel;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.handler.codec.http.HttpObjectAggregator;import io.netty.handler.codec.http.HttpServerCodec;import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;import io.netty.handler.stream.ChunkedWriteHandler;public class WebSocketServerInitializer extends ChannelInitializer
 {      @Override    protected void initChannel(Channel ch) throws Exception {        ChannelPipeline pipeline = ch.pipeline();                 pipeline.addLast(new HttpServerCodec());                 pipeline.addLast(new ChunkedWriteHandler());                 pipeline.addLast(new HttpObjectAggregator(64*1024));                 pipeline.addLast(new HttpRequestHandler("/ws"));                 pipeline.addLast(new WebSocketServerProtocolHandler("/ws"));                 pipeline.addLast(new TextWebSocketFrameHandler());             } }

pom.xml

log4j
log4j
1.2.14
commons-logging
commons-logging
1.1.1
io.netty
netty-all
4.0.29.Final

使用HTML5作为websocket前端实现

index.html

Insert title here    
        var socket;        if (!window.WebSocket) {            window.WebSocket = window.MozWebSocket;        }        if (window.WebSocket) {            socket = new WebSocket("ws://localhost:8844/ws");            socket.onmessage = function(event) {                var ta = document.getElementById('responseText');                ta.value = ta.value + '\n' + event.data            };            socket.onopen = function(event) {                var ta = document.getElementById('responseText');                ta.value = "连接开启!";            };            socket.onclose = function(event) {                var ta = document.getElementById('responseText');                ta.value = ta.value + "连接被关闭";            };        } else {            alert("你的浏览器不支持!");        }         function send(message) {            if (!window.WebSocket) {                return;            }            if (socket.readyState == WebSocket.OPEN) {                socket.send(message);            } else {                alert("连接没有开启.");            }        }        
        
        

输出: