netty学习1
1、IO
java 自带IO流
1)同步处理方式,一个请求占用一个线程,高并发常见出现问题
2、java nio
实在jdk1.4版本上新添加的new IO / 非阻塞IO
可多路并发
3、Netty封装NIO开发
netty可轻松开发高性能Client-server应用程序
4、netty粘包、拆包问题
数据传输过程中使用的为byte,会出现两次数据内容在一起(粘包)
一次数据被解析成2个 (拆包)
本质是server、client解析数据内容时不知道数据内容的长短,出现数据缺失或者过多解析问题
解决方法:
1)、消息长度固定
2)使用回车换行符作为消息结束符
3)通过其他特殊字符作为消息的结束标志
4)通过在消息头中国你定义长度字段来标示消息的总长度
5、netty自带的分隔符/定长解码器的应用
DelimiterBasedFrameDecoder
FixedLengthFrameDecoder
6、编解码技术
java自带序列化缺点:
1、无法跨语言
2、序列化后码流偏大
3、序列化性能太低
业界主流的编解码框架
1、google的protobuf
通过对比发现json性能仅次于protobuf
2、facebook的Thrift
3、JBoss marshalling
4、MessagePack编解码(传输对象)
5、使用LengFieldPrepender
LengthFieldBasedFrameDecoder解决粘包、拆包问题
netty学习1的更多相关文章
- netty学习资料
netty学习资料推荐官方文档和<netty权威指南>和<netty in action>这两本书.下面收集下网上分享的资料 netty官方参考文档 Netty 4.x Use ...
- Netty学习之客户端创建
一.客户端开发时序图 图片来源:Netty权威指南(第2版) 二.Netty客户端开发步骤 使用Netty进行客户端开发主要有以下几个步骤: 1.用户线程创建Bootstrap Bootstrap b ...
- netty学习资源收集
Netty学习笔记 Netty In Actions CSDN专栏 一起学Netty-CSDN专栏 Netty In Action中文版
- Netty 学习 一、初识Netty【原创】
在过去几年的工作和学习中,比较关注高层次的应用开发,对底层探究较少.实现Web应用的开发,主要依赖Tomcat.Apache等应用服务器,程序员无需了解底层协议,但同样限制了应用的性能和效率.现在开始 ...
- Netty学习笔记(二) 实现服务端和客户端
在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...
- Netty 学习笔记(1)通信原理
前言 本文主要从 select 和 epoll 系统调用入手,来打开 Netty 的大门,从认识 Netty 的基础原理 —— I/O 多路复用模型开始. Netty 的通信原理 Netty 底层 ...
- Netty 学习资料
Netty 学习资料 Netty 学习资料 链接网址 说明 Netty 4.x 用户指南 http://wiki.jikexueyuan.com/project/netty-4-user-guide/ ...
- Netty学习第一节Netty的总体概况
一.Netty简介 什么是Netty? 1.高性能事件驱动,异步非阻塞的IO加载开源框架. 它是由JBoss提供,用于建立TCP等底层链接.基于Netty可以建立高性能的HTTP服务器,快速开发高性能 ...
- Netty学习——Thrift的入门使用
Netty学习——Thrift的入门使用 希望你能够,了解并使用它.因为它是一个效率很高的框架 官网地址:http://thrift.apache.org/ 1.Thrift数据类型 一门技术如果需要 ...
- Netty学习——Apache Thrift 简介和下载安装
Netty学习——Apache Thrift 简介和下载安装 Apache Thrift 简介 本来由Facebook开发,捐献给了Apache,成了Apache的一个重要项目 可伸缩的,跨语言的服务 ...
随机推荐
- 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL
这里是:一看就会,一做就废系列 数据库演示版本为 19.3 (12.2.0.3) 该系列涉及恢复过程中使用的 5 个语句: 1. recover database 2. recover databas ...
- Makefile文件(DE1-soc软件实验”hello_word")
DE1-soc软件实验”hello_word"中,hello_word此程序很好理解,那Makefile文件又如何理解呢? 所要完成的Makefile 文件描述了整个工程的编译.连接等规则. ...
- Flask-SQLAlchemy笔记(一):通过query语句获取关注用户的帖子
一,预先定义内容 #关联表followers = db.Table('followers', db.Column('follower_id', db.Integer, db.ForeignKey('u ...
- 状态压缩DP入门题
. /*本题为状态压缩题 题目大意 : 一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧, 可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方 格不能同时放牛(不包括斜着的 ...
- macos 杀掉端口 命令行
sudo lsof -i:3000 kill 11111 1111就是pid下面的数字
- Wx-小程序中使用伪类选择器实现border-1px
.borders::before{ position: absolute; left:; top:; content: " "; width: 100%; height: 1px; ...
- 【红黑树】的详细实现(C++)
红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键 ...
- Tensorflow版本更改所产生的问题及解决方案
1.module 'tensorflow' has no attribute 'mul' tf.mul已经在新版本中被移除,使用 tf.multiply 代替 解决方法 将tf.mul(input1, ...
- Opencv模块
参考博客:https://blog.csdn.net/u012679707/article/details/79505279
- 《一句话理解Vue核心内容》阅读笔记
Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架. 在解释什么是渐进式框架之前,有必要了解一下什么是框架 在最初的前端开发中,我们利用JS获取HTML中的DOM元素 ...