netty随笔
netty是一个nio框架,通过rpc长连接进行通信。
nio和bio的区别是:bio是通过tcp/ip的三次握手机制实现通信,服务端连接几个客户端就要开几个线程,而nio有一个叫选择器(多路复用器)的东西,客户端要跟服务端进行通信,需要先在选择器上注册一个管道,可以理解这个管道是用来做数据传输的,然后服务端只要开启一个线程来轮询注册进来的客户端管道,根据不同的管道状态交给服务器管道做对应的处理,服务器也要进行管道注册。主要的状态有可读、可写、堵塞等状态。
主要的api有:
serverBootstap 服务端辅助类,
两个线程组,一个负责接收客户端的请求,一个负责实质的数据读写。
实现数据读写的类需要继承channelHandlerAdapter这个类,实现父类的方法,主要的方法有数据接收前,数据接收,数据接收后,数据接收异常处理方法等。
实现拆包粘包的方法有三种:一是消息定长,不够的用空格补齐;第二个是特定符号做分割;第三个是在消息头加一个长度字段,记录消息的长度。
实现解压缩的方法工具有:JBoss的marshalling,谷歌的protobuf等
netty随笔的更多相关文章
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- Netty源码之解码中两种数据积累器(Cumulator)的区别
上一篇随笔中已经介绍了解码核心工作流程,里面有个数据积累器的存在(Cumulator),其实解码中有两种Cumulator,那他们的区别是什么呢? 还是先打开ByteToMessageDecoder的 ...
- SpringBoot+Netty+WebSocket实现实时通信
这篇随笔暂时不讲原理,首先搭建起一个简单的可以实现通信的Demo.之后的一系列随笔会进行一些原理上的分享. 不过在这之前大家最好了解一下Netty的线程模型和NIO编程模型,会对它的整体逻辑有所了解. ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- 基于netty http协议栈的轻量级流程控制组件的实现
今儿个是冬至,所谓“冬大过年”,公司也应景五点钟就放大伙儿回家吃饺子喝羊肉汤了,而我本着极高的职业素养依然坚持留在公司(实则因为没饺子吃没羊肉汤喝,只能呆公司吃食堂……).趁着这一个多小时的时间,想跟 ...
- 从netty-example分析Netty组件续
上文我们从netty-example的Discard服务器端示例分析了netty的组件,今天我们从另一个简单的示例Echo客户端分析一下上个示例中没有出现的netty组件. 1. 服务端的连接处理,读 ...
- 源码分析netty服务器创建过程vs java nio服务器创建
1.Java NIO服务端创建 首先,我们通过一个时序图来看下如何创建一个NIO服务端并启动监听,接收多个客户端的连接,进行消息的异步读写. 示例代码(参考文献[2]): import java.io ...
- 从netty-example分析Netty组件
分析netty从源码开始 准备工作: 1.下载源代码:https://github.com/netty/netty.git 我下载的版本为4.1 2. eclipse导入maven工程. netty提 ...
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
随机推荐
- Kafka介绍与消息队列
消息队列的好处: 消息队列(Message Queue) 消息: 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列:一种特殊的线性表(数据元素首尾相接),特殊之 ...
- tkinter 写一个简易的ide
简易IDE 基于tkinter的简易ide,参考文档和Baidu的资料制作的,过程中遇到了很多问题,也学到了很多知识. 功能: 1.菜单栏 2.编辑功能 open save... 3.快捷键 ctr ...
- 引用全局变量global
lang = Lang.chn def set_lang(lang_type): global lang lang = lang_type
- iOS开发中didSelectRowAtIndexPath tap事件响应延迟
为UITableViewCell添加tapped事件,代码如下: class VideoViewController: UIViewController , UITableViewDataSource ...
- node.js获取本机Ip, hostName, mac
//获取ip地址 getIPAdress() { let interfaces = require('os').networkInterfaces(); for (var devName in int ...
- spring boot报Unsupported Media Type Content type '*/*;charset=UTF-8' not supported
1.请求设置Content-Type:application/json即可 ajax一般默认:Content-Type: application/x-www-form-urlencoded;chars ...
- import_module 导入变量的包
遇到你想导入的包是变量的时候,可以用这个实现 from importlib import import_module settings_path = self.pathm2 = import_modu ...
- Java编写串口程序
用Java编写串口程序一般都会用到这个 http://fizzed.com/oss/rxtx-for-java 根据电脑的情况下载 解压以后有安装文档 For a JDK installation: ...
- centos 7设置本地yum资源库
前言 同样的,是在这两天安装ambari的时候遇到的问题之一,那就是关于centos的本地yum源的制作,当时是一种是制作iso镜像的yum源,还有一种将rpm软件包打成压缩包上传到centos的某一 ...
- 解决 jdk8 Illegal key size or default parameters 错误
网上搜到的答案如:https://blog.csdn.net/educast/article/details/81060085 大多是jdk1.6或1.7版本,有的jdk是1.8.99之前的版本,而 ...