Java 网络编程
socket通信机制
建立在两种通信协议上 tcp 和 udp 。
tcp:可靠传输,建立在三次握手基础上,有一次服务端与客户端确认的过程,确认后服务端再与客户端继续通信,面向连接。
udp:一种报文协议,是无连接的不安全的。
Java 网络编程 初识
阻塞的IO: 按照命名理解,server端与client端通信是阻塞的,server会一直监听某个接口直到有client端与它建立连接。
非阻塞的IO:server端与client的通信是非阻塞的,异步建议连接,在异步web中主要学习了解了netty。
阻塞IO的例子:
非阻塞IO:
netty的核心组件:
Channel:传入(入站)或者传出(出站)数据的载体;它可以被打开或者被关闭,连接或者断开连接。
回调:是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得后 者 可以在适当的时候调用前者
Future:一个异步操 作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问。
举例:
事件和 ChannelHandler:使用不同的事件来通知我们状态的改变或者是操作的状态。这使得我们能够基于已经 发生的事件来触发适当的动作
相关时序图与例子:
服务端:
1、创建ServerBootStrap实例
2、设置并绑定Reactor线程池:EventLoopGroup,EventLoop就是处理所有注册到本线程的Selector上面的Channel
3、设置并绑定服务端的channel
4、5、创建处理网络事件的ChannelPipeline和handler,网络时间以流的形式在其中流转,handler完成多数的功能定制:比如编解码 SSl安全认证
6、绑定并启动监听端口
7、当轮训到准备就绪的channel后,由Reactor线程:NioEventLoop执行pipline中的方法,最终调度并执行channelHandler
客户端: