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的更多相关文章

  1. netty学习资料

    netty学习资料推荐官方文档和<netty权威指南>和<netty in action>这两本书.下面收集下网上分享的资料 netty官方参考文档 Netty 4.x Use ...

  2. Netty学习之客户端创建

    一.客户端开发时序图 图片来源:Netty权威指南(第2版) 二.Netty客户端开发步骤 使用Netty进行客户端开发主要有以下几个步骤: 1.用户线程创建Bootstrap Bootstrap b ...

  3. netty学习资源收集

    Netty学习笔记 Netty In Actions CSDN专栏 一起学Netty-CSDN专栏 Netty In Action中文版

  4. Netty 学习 一、初识Netty【原创】

    在过去几年的工作和学习中,比较关注高层次的应用开发,对底层探究较少.实现Web应用的开发,主要依赖Tomcat.Apache等应用服务器,程序员无需了解底层协议,但同样限制了应用的性能和效率.现在开始 ...

  5. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  6. Netty 学习笔记(1)通信原理

    前言 本文主要从 select 和 epoll 系统调用入手,来打开 Netty 的大门,从认识 Netty 的基础原理 —— I/O 多路复用模型开始.   Netty 的通信原理 Netty 底层 ...

  7. Netty 学习资料

    Netty 学习资料 Netty 学习资料 链接网址 说明 Netty 4.x 用户指南 http://wiki.jikexueyuan.com/project/netty-4-user-guide/ ...

  8. Netty学习第一节Netty的总体概况

    一.Netty简介 什么是Netty? 1.高性能事件驱动,异步非阻塞的IO加载开源框架. 它是由JBoss提供,用于建立TCP等底层链接.基于Netty可以建立高性能的HTTP服务器,快速开发高性能 ...

  9. Netty学习——Thrift的入门使用

    Netty学习——Thrift的入门使用 希望你能够,了解并使用它.因为它是一个效率很高的框架 官网地址:http://thrift.apache.org/ 1.Thrift数据类型 一门技术如果需要 ...

  10. Netty学习——Apache Thrift 简介和下载安装

    Netty学习——Apache Thrift 简介和下载安装 Apache Thrift 简介 本来由Facebook开发,捐献给了Apache,成了Apache的一个重要项目 可伸缩的,跨语言的服务 ...

随机推荐

  1. Java基础之使用Scanner类获取用户输入

    创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); Scanner 类的 next() 方法 import java.util.Scanne ...

  2. flask入门(二)

    接着上文 讲一讲响应 flask调用视图函数后,会将其返回值作为响应的内容.大多数情况下,响应就是一个简单的字符串,作为HTML页面回送客户端.但HTTP协议需要的不仅是作为请求响应的字符串.HTTP ...

  3. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  4. JS高级---作用域,作用域链和预解析

    作用域,作用域链和预解析     变量---->局部变量和全局变量, 作用域: 就是变量的使用范围   局部作用域和全局作用域 js中没有块级作用域---一对括号中定义的变量,这个变量可以在大括 ...

  5. 防止不同账号之间localStorage数据错误

    set和get的时候,key后面加上用户ID

  6. Flink架构(三)- 事件-时间(Event-Time)处理

    3. 事件-时间(Event-Time)处理 在“时间语义”中,我们强调了在流处理应用中时间语义的重要性,并解释了处理时间与事件时间的不同点.处理时间较好理解,因为它基于本地机器的时间,它产生的是有点 ...

  7. MySQL学习(十一)double write 介绍 (半原创)

    复习 Innodb关键的特性 插入缓存 两次写 异步IO 刷新邻近页 自适应哈希索引 概述 double write 的主要的作用是保证写入数据库文件的可靠性.通俗地说就是一份数据写两个地方,当出现异 ...

  8. vue 使用 jsonp 请求数据

    vue 使用 jsonp 请求数据 vue请求数据的时候,会遇到跨域问题,服务器为了保证信息的安全,对跨域请求进行拦截,因此,为了解决vue跨域请求问题,需要使用jsonp. 安装jsonp npm ...

  9. webpack配置的说明

    {devtool: 'source-map',//要启用source-map需加上此配置项,同时css或less的loader要加上参数?sourceMap,js的loader不用加 entry: e ...

  10. 【Python】数值运算函数