Socket网络通讯编程(二)

1.Netty初步编程

2.HelloWorldapi

3.Netty核心技术之(TCP拆包和粘包问题)缓存

4.Netty核心技术之(编解码技术)安全

5.Netty的UDP实现服务器

6.Netty的WebSocket实现网络

7.Netty实现文件服务器(基于HTTP协议)框架

8.最佳实践(数据通讯、心跳检测)异步

9.mina入门基础socket

 

1.1为何选择Netty分布式

咱们已经了解了Socket通讯/IO/NIO/AIO编程,对于通讯模型已经有了一个初步的认识,其实仅仅是一个模型,若是想把这些真正的用于实际工做中去,那么嗨须要不断地完善、扩展和优化。好比很经典的TCP读包写包问题,或者是数据接收的大小,实际的通讯读取与应答的处理逻辑等等一些细节问题须要咱们认真的 去思考,而这些咱们都须要大量的时间和经历,以及丰富的经验。因此想学会socket通讯不是件容易的事情,那么如今,咱们就要学习一门新的技术Netty,咱们为何选择Netty,缘由无他,简单!没必要去编写复杂的代码逻辑去实现通讯,不须要考虑性能问题,不须要考虑编解码的问题,半包读写问题等,这些强大的Netty已经帮咱们实现好了,咱们 只须要使用便可。

Netty是最流行的NIO框架,它的健壮性、功能、性能、可定制性和可扩展性在同类框架都是数一数二的。它已经获得成百上千的商业/商用项目验证,如Hadoop的RPC框架Avro以及JMS框架RocketMQ,还有主流的分布式通讯框架Dubbox等等。

 

Netty简介

Netty是基于Java NIO的网络应用框架

 

Netty是一个NIO client-server(客户端服务器)框架,使用Netty能够快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。Netty的内部实现时很复杂的,可是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是彻底基于NIO实现的,因此整个Netty都是异步的。

 

网络应用程序一般须要有较高的可扩展性,不管是Netty仍是其余的基于Java NIO的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性,本章将讨论同步(阻塞)和异步(非阻塞)IO来讲明为何使用异步代码来解决扩展性问题以及如何使用异步。

 

 

 

 Netty的功能很是丰富

 

        经过本书能够学习Netty丰富的功能。下图是Netty框架的组成

 

 

 

Netty特性

Development Area

Netty Features

Design(设计)

  • 各类传输类型,阻塞和非阻塞套接字统一的API
  • 使用灵活
  • 简单但功能强大的线程模型
  • 无链接的DatagramSocket支持
  • 链逻辑,易于重用

Ease of Use(易于使用)

  • 提供大量的文档和例子
  • 除了依赖jdk1.6+,没有额外的依赖关系。某些功能依赖jdk1.7+,其余特性可能有相关依赖,但都是可选的。

Performance(性能)

  • 比Java APIS更好的吞吐量和更低的延迟
  • 由于线程池和重用全部消耗较少的资源
  • 尽可能减小没必要要的内存拷贝

Robustness(鲁棒性)

鲁棒性,能够理解为健壮性

  • 连接快或慢或超载不会致使更多的OutOfMemoryError
  • 在高速的网络程序中不会有不公平的read/write

Security(安全性)

  • 完整的SSL/TLS和StartTLS支持
  • 能够在如Applet或OSGI这些受限制的环境中运行

Community(社区)

  • 版本发布频繁
  • 社区活跃

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Helloworld入门

在学习Netty以前,先来回顾一下NIO的通讯步骤:

①建立ServerSocketChannel,为其配置非阻塞模式。

②绑定监听,配置TCP参数,录入backlog大小等。

③建立一个独立的IO线程,用于轮询多路复用器Selector。

④建立Selector,将以前建立的ServerSocketChannel注册到Selector上,并设置监听标识位SelectionKey.OP_ACCEPT。

⑤启动IO线程,在循环体中执行Selector.select()方法,轮询就绪的通道。

⑥当轮询处处于就绪状态的通道时,须要进行操做位判断,若是是ACCEPT状态,说明是新的客户端接入,则调用accept方法接收新的客户端。

⑦设置新接入客户端的一些参数,如非阻塞,并将其继续注册到Selector上,设置监听标识位等。

⑧若是轮询的通道标识位是READ,则进行读取,构造Buffer对象等。

⑨更细节的问题还有数据没发送完成继续发送的问题......

好啦,开始学习Netty了。先去http://netty.io/上下载全部的Netty包。

Netty通讯的步骤:

①建立两个NIO线程组,一个专门用于网络事件处理(接受客户端的链接),另外一个则进行网络通讯的读写。

②建立一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等。

③建立一个用于实际处理数据的类ChannelInitializer,进行初始化的准备工做,好比设置接受传出数据的字符集、格式以及实际处理数据的接口。

④绑定端口,执行同步阻塞方法等待服务器端启动便可。

相关文章
相关标签/搜索