说明
JBOSS-Netty一个基于NIO的开源网络框架,它内部实现了很多网络协议;所以咱们不用关心具体协议内容;当然,如果内置没有实现的协议都可进行扩展;这个就取决于你的熟练度了。
WebSocket JS同样也是一个JavaScript前端网络库,它主要帮助你解决各个浏览器之间不兼容WebSocket标准的问题(主要依赖FLASH来解决Socket通信问题)。
JBOSS-Netty 官网:http://netty.io/
WebSocketJS 源码地址:https://github.com/gimite/web-socket-js
注意
1、Netty版本:3.9.4-Final
2、WebSocketJS版本随意,毕竟只是一个小小的库而已,从Github上拿最新代码下来即可。
3、请把WebSocketJS部署在WEB容器里面运行,我这里采用的是tomcat6.x。
4、如果浏览器是IE8或不支持WebSocket浏览器的版本,FLASH需要一个策略文件才可以进行通信;详情参考:FLASH策略文件篇;
简单示例
运行简单示例代码的时候请确保依赖包和JAVA环境都配备正常,这里的例子只适合JAVA基础较高的人群。
public static void main(String[] args) {
int port = 5000;
ChannelFactory channelFactory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(channelFactory);
// Set up the event pipeline factory.
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("1", new HttpRequestDecoder());
pipeline.addLast("2", new HttpResponseEncoder());
pipeline.addLast("3", new WebSocketServerProtocolHandshakeHandler("/", null, true));
pipeline.addLast("4", new WebSocketHandler());
return pipeline;
}
});
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(port));
}
static class WebSocketHandler extends SimpleChannelHandler{
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
e.getCause().printStackTrace();
ctx.getChannel().close();
}
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
if(e.getMessage() instanceof TextWebSocketFrame){
TextWebSocketFrame frame = (TextWebSocketFrame)e.getMessage();
System.out.println(frame.getText());
}
}
}
再到浏览器输入地址:http://localhost:8080/web-socket-js/sample.html
注意:在输入地址验证的时候请确保页面的端口地址与服务器端口地址一致。
注明:建议先使用Chrome浏览器测试、避免不熟悉FLASH策略文件问题。
如果页面显示onopen状态后就可以开始发送消息了,输入文字点击发送、后台会接收到信息并打印出来。
最后
如果上述代码有哪些地方有疑惑的或者出现问题的请留言,如果我知道的我会答复你们的;更多详细信息可以参考官方网站上面例子的说明。
WebSocket协议分析参考资料
http://www.cnblogs.com/caosiyang/archive/2012/08/14/2637721.html
http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html