NIO与Netty编程
文章平均质量分 74
NIO和BIO有着相同的目的和作用,但是它们的实现方式不同,BIO以流的方式处理数据,而NIO以块的方式处理数据,块IO的效率比流IO高很多。NIO是非阻塞式的,它可以提供非阻塞式的高伸缩性网络。Netty是由JBOSS提供的一个Java开源框架,提供异步的,基于事件驱动的网络应用程序框架。
坐飞机的狗
熟悉java技术,熟悉java常用设计模式,熟悉java高并发程序设计,了解jvm调优;熟悉基于spring boot+Mybatis的网站后端开发;了解go web开发,熟悉基于RPC + go 微服务开发;熟悉python常用的数据分析库(pandas\sklearn\tensorflow等)、爬虫框架(scrapy)、django后端开发;熟悉mysql的使用;了解前端HTML+CSS+Javascript;了解常用的机器学习算法;熟悉git常用操作。
展开
-
序列化数据及RPC
JDK提供了ObjectOutputStream和ObjectInputStream,用于通过网络对POJO的基本数据类型的图进行序列化和反序列化。 Google的Protobuf 支持跨平台、多语言(支持目前巨大多数语言,例如C++、C#、Java、Python等; 高性能、高可靠性; 使用protobuf编译器能自动生成代码,Protobuf是将类的定义使用.proto文件进行描述,然后通过protoc.exe编译器根据.proto自动生成.java文件; 自定义RPC RPC:远程过程调用,原创 2021-03-16 14:59:44 · 89 阅读 · 0 评论 -
编码和解码
概述 编码器操作出站数据,而解码器处理入站数据。编码器是将消息转换为适合于传输的格式,而对应的解码器则是将网络字节流转换回应用程序的消息格式。 解码器 将字节解码为消息:ByteToMessageDecoder、ReplayingDecoder 将一种消息类型解码为另外一种:MessageToMessageDecoder 因为解码器是负责将入站数据从一种格式转换到另外一种格式,所以Netty的解码器实现了ChannelInboundHandler。每当需要为ChannelPipeline中的下一个C原创 2021-03-15 17:30:12 · 1720 阅读 · 0 评论 -
Netty核心API介绍
EventLoopGroup和其实现类NioEventLoopGroup EventLoopGroup是一组EventLoop的抽象,Netty为了更好的利用多核CPU资源,一般会有多个 EventLoop 同时工作, 每个 EventLoop 维护着一个 Selector 实例。原创 2021-03-12 20:48:43 · 282 阅读 · 3 评论 -
Netty回调与Channel执行流程分析
Chanel的生命周期: 状态 描述 ChannelUnregistered Channel已被创建,但未注册到EventLoop ChannelRegisterd Channel注册到EventLoop ChannelActive Channel处于活动状态 ChannelInactive Channel没有连接到远程节点 Channel的状态发生改变是,会生成相应的事件,这些事件将会转发给ChannelPipline中的Chan..原创 2021-03-06 20:59:49 · 775 阅读 · 0 评论 -
Netty核心组件
Channel:Channel是Java NIO的一个基本构造,代表一个到实体的开放连接,它可以被打开或者关闭,连接或者断开连接。 回调:一个回调是一个方法,一个指向已经被提供给另外一个方法的引用。使得接收回调的方法可以在合适的时候调用前者。 Future:提供异步操作的结果占位符,但是concurrent中的Future需要手动检查或者阻塞,所以Netty提供了自己的实现———ChannelFuture 常用方法: 注册监听器ChannelFutureListener() 监听器的回调方法op原创 2021-03-03 21:51:39 · 67 阅读 · 1 评论 -
三次握手与四次挥手
Seq:用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号 ACK:为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段 SYN:同步序号,为1表示连接请求,用于建立连接和使序列号同步 FIN:用于释放连接,为1表示发送方没有数据发送了,关闭本方数据流 三次握手: 1. 第一次握手:客户端给服务器发送一个SYN报文 客户端的发送能力正常 客户端:SYN_Sent ...原创 2021-03-02 21:02:02 · 71 阅读 · 0 评论 -
Java中IO流
Java中IO流分为3种: 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以分为字节流和字符流 按照流的角色划分为节点流和处理流 字节流:处理字节数据的流设备。字节流可以处理设备上的所有数据,所以字节流可以处理字符数据。字符流:由于字符每个国家都使用得不一样,所以涉及到了字符编码问题,为了方便文字的解析,所以将字节流和编码表封装成对象,这个对象就是字符流。 InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流。 OutputStream/Wri原创 2021-03-02 16:30:48 · 107 阅读 · 3 评论