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的一个重要项目 可伸缩的,跨语言的服务 ...
随机推荐
- Python中的模块简单认识
将自己定义的方法,变量存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件称为模块. 细说的话,模块可以分为四个通用类别: 1 使用python编写的.py文件(自定义模块) 2 已被编译为共 ...
- exists和not exists关键字
表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 B1 2 2 B2 3 2 B3 SELECT ID,NAME FROM A ...
- FP side-effects
https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076be ...
- 安装符合rancher2.x要求的docker
安装符合rancher2.x要求的docker 待办 https://rancher.com/docs/rancher/v2.x/en/installation/requirements/instal ...
- Flink读写Kafka
Flink 读写Kafka 在Flink中,我们分别用Source Connectors代表连接数据源的连接器,用Sink Connector代表连接数据输出的连接器.下面我们介绍一下Flink中用于 ...
- Equalize
You are given two binary strings aa and bb of the same length. You can perform the following two ope ...
- 爬虫入门 beautifulsoup库(一)
先贴一个beautifulsoup的官方文档,https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#id12 requ ...
- python调用sqlite
参考资料:https://www.liaoxuefeng.com/wiki/1016959663602400/1017801751919456 https://www.cnblogs.com/lia ...
- mysql yum 卸载取消开机自启动
查询安装的yum源rpm -qa | grep -i mysql 使用yum remove卸载 yum remove 刚才过滤出来的包一个个来 剩下卸载不了使用 rpm -e --nodeps: rp ...
- 关于video++,jsrun,有道笔记等的感想
这几天一直在思考切入点.想了很多,有关于给初创企业提供社交平台营销的,如公众号,小程序,支付宝的到位,附近等.这些初看起来可行,细想起来有一些根本不完备.如通过微小宝多平台客户端了解最热的内容,在内容 ...