JBoss Netty&WebSocket JS实现与部署方案

说明

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值