Netty + WebSocket 简例

 

原文:《Netty入门之WebSocket初体验

Netty简述

Netty是一个事件驱动型、异步非阻塞的高性能 Java IO 框架。

它对 Java NIO 框架作了封装与改进,提供了良好的稳定性和伸缩性,可简化网络应用的开发。很多项目将其作为底层Socket通信的基础框架(如,广为人知的Dubbo)。

 

原生 Java NIO 框架的使用门槛比较高,需要对Java多线程编程、网络编程等相关知识非常熟悉。

异步、非阻塞、情况多变的网络状况等特殊性引出的半包读写、失败缓存、客户端断连重连、网络拥塞、异常状态/内容的处理非常繁琐困难,非业务性的编码工作量大。

此外,Java NIO 框架各种类、API繁杂,学习成本也不小。

 

相对而言,Netty的使用比较容易。API简单,性能、可靠性、处理能力、可扩展性等各方法都提供了良好的支持,还避免了JDK NIO的bug。

Netty支持多种主流协议,预置了多种编解码功能,使用门槛较低。

 

WebSocket简述

WebSocket是H5提出的一个协议规范。它是一种为解决客户端与服务端实时通信而产生的技术。其本质是一种基于TCP的协议。客户端先以 HTTP/HTTPS 协议发出一条特殊的HTTP请求,与服务端握手建立连接后,双方可进行通信。

在WebSocket出现之前,Web交互多是基于HTTP协议(有短连接,也有长连接)。

WebSocket的优势:

  • 节省通信开销。

    以前实现“消息推送”/“即时通讯”都采用轮询机制。客户端会定期(如,每隔1秒)主动发起请求,从服务端拉取消息。可能实际需要的业务数据很少,而HTTP Header数据量占比较高,很耗服务器资源。

    在WebSocket模式下,连接建立后,双方通信的非业务数据占比较少。

  • 服务端主动推送数据给客户端。

  • 实时通信。WebSocket连接建立后,双方可以相互推送信息,及时性比传统HTTP方式更高。

 

示例:一个简单的应答程序

网页客户界面示例

 

主要代码

引入对Netty的依赖(Maven)

Xml代码

 

  1. <dependency>  

  2.   <groupId>io.netty</groupId>  

  3.   <artifactId>netty-all</artifactId>  

  4.   <version>5.0.0.Alpha2</version>  

  5. </dependency>  

 

配置类

Java代码

 

  1. public class Config {  

  2.   public static final String Service_Host = "localhost";  

  3.   public static final int Service_Port = 6789;  

  4.   public static final String Service_Url = String.format(  

  5.       "ws://%s:%s/echo", Service_Host, Service_Port);  

  6. }  

 

客户端连接(Channel)处理类

Java代码

 

  1. import io.netty.channel.ChannelInitializer;  

  2. import io.netty.channel.ChannelPipeline;  

  3. import io.netty.channel.socket.SocketChannel;  

  4. import io.netty.handler.codec.htt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值