netty
yinbucheng
这个作者很懒,什么都没留下…
展开
-
netty的使用
既然是入门,那我们就在这里写一个简单的Demo,客户端发送一个字符串到服务器端,服务器端接收字符串后再发送回客户端。2.1、配置开发环境1.安装JDK2.去官网下载jar包(或者通过pom构建)2.2、认识下Netty的Client和Server 一个Netty应用模型,如下图所示,但需要明白一点的是,我们写的Server会自动处理多客户转载 2017-06-29 20:28:13 · 703 阅读 · 0 评论 -
netty如何判断数据包是否结束
上一篇中分析netty会缓存不完整的数据包,那如何判断数据包是否结束了?本章主要分析netty中常用判断tcp中数据包是否上传完毕。这里我还是用LengthFieldBasedFrameDecoder进行分析其解析数据可以分为两个部分,head表示头用来记录数据长度 body表示存放的数据部分我们以head存放body长度(不包括自身长度)对应LengthFieldBased...原创 2019-05-30 19:35:16 · 3951 阅读 · 0 评论 -
tcp中非阻塞编程为啥出现粘包问题及netty如何解决
在网络编程中我们调用send方法只是将数据存放到sendbuf中由底层tcp进行发送包,这里发送包底层会进行一些优化,尽可能一次发送多的数据,但是数据大小不能太大如果太大会拆分多次进行发送。所有在这个过程中就会出现一次发送包含大量数据包或者一次无法发送完整的数据包。这就是我们说的粘包问题。在阻塞编程中我们获取连接管道后不停去读取数据判断是否满足指定标记来结束一个包,而非阻塞编程中由于select模...原创 2019-05-30 16:35:35 · 478 阅读 · 0 评论 -
LengthFieldBasedFrameDecoder和LengthFieldPrepender
/** * Creates a new instance. * * @param maxFrameLength * the maximum length of the frame. If the length of the frame is * greater than this value, {@link TooLongFrameException} wi转载 2017-08-15 23:04:38 · 401 阅读 · 0 评论 -
MessagePack使用
在使用MessagePack是主要注意点是要在pojo上添加@Message注解不然就会报错。如果是在netty中就无法发送数据 MessagePack pack = new MessagePack(); Student student = new Student(); student.setUserName("啦啦啦"); student.setGender("男"); stud转载 2017-08-15 21:27:59 · 1325 阅读 · 0 评论 -
编解码技术
1. 背景1.1. 编解码技术通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。反之,解码(Decode)/反序列化(deserialization)把从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷贝),以方便后续的业务逻辑操作。进行远程跨进程服务调用时(例如转载 2017-08-14 23:10:48 · 5425 阅读 · 1 评论 -
使用netty开发私有栈协议
基于Netty的私有协议栈的开发书是人类进步的阶梯,每读一本书都使自己得以提升,以前看书都是看了就看了,当时感觉受益匪浅,时间一长就又还回到书本了!所以说,好记性不如烂笔头,以后每次看完一本书都写一些读后感,对于技术书则把对让自己醍醐灌顶的篇章记录下来,以便以后翻阅查看,也是记录自己学习的过程- _ -。OK!言归正传,最近由于公司需要做一个网关项目,需要用到基于TCP/IP私有协转载 2017-08-21 06:50:51 · 739 阅读 · 0 评论 -
Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ、基于Java的ActiveMQ/Apache Kafka、基于C/C++的ZeroMQ等等,都能进行大批量的消息路由转发。它们的共同特点是,都有一个消息中转路由节点,按照消息队列里面的专业术语,这个角色转载 2017-08-11 12:00:40 · 800 阅读 · 1 评论 -
netty实现高性能的rpc框架
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议。说的再直白一点,就是客户端在不必知道调用细节的前提之下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样。目前典型的RPC实现框架有:Thrift(facebook开源)、Dubbo(alibaba开源)等等。RPC框架针转载 2017-08-11 11:57:35 · 1591 阅读 · 0 评论 -
使用Netty实现自定义推送
在推送中主要是为了维持tcp长链接,其中采用的技术包括ping/pong 断开从连。本文简单的实现:重要数据结构:public enum MsgType{ PING,PONG,LONGIN,PUSH}//所有消息类型的基类public class BaseMsg implements Serializable{private static final long转载 2017-08-11 11:48:23 · 4082 阅读 · 0 评论 -
netty实现网络推送
简介消息推送一般的思路就是: 1.轮询(Pull)客户端定时的去询问服务器是否有新消息需要下发;确点很明显Android后台不停的访问网络费电还浪费流量。2.推送(Push)服务端有新消息立即发送给客户端,这就没有时间的延迟,消息及时到达。当时需求过来之后就首先考虑的这两个,开发的角度Pull实现起来简单省事,但从用户来说省电和省流量才是主要的,所以最后选用Push。客转载 2017-08-11 08:49:18 · 4341 阅读 · 0 评论 -
netty实现websocket
现在网上网站为了实现推送基本都采用轮询的方式,比较新的轮询技术是comet,采用ajax,但是还是得发送请求,为了解决html效率低下的问题,html5定义了websocket协议。服务端代码:import java.util.concurrent.TimeUnit;import org.apache.activemq.util.TimeUtils;import io.转载 2017-08-17 22:42:37 · 394 阅读 · 0 评论 -
Netty 实现HTTP文件服务器
Netty 实现HTTP文件服务器一,需求文件服务器使用HTTP协议对外提供服务。用户通过浏览器访问文件服务器,首先对URL进行检查,若失败返回403错误;若通过校验,以链接的方式打开当前目录,每个目录或文件都以超链接的形式展现,可递归访问,并下载文件。 二,关键实现代码①文件服务器启动类需要添加的通道处理器如下:@Override转载 2017-08-16 21:39:27 · 845 阅读 · 0 评论 -
使用netty和messagepack编写网络请求
在我们使用Netty开发基于网络的应用程序的时候,你都需要实现一些符合自己应用的codec,在Netty中也提供了很多种编解码的实现,在实现自定义编解码器的时候,我们只需要继承相关接口后,重写部分方法就可以实现decode和encode。例如在我们继承了ByteToMessageDecoder 类后只需要重写decode()方法就可以实现解码。在学习Netty的过程中我实现了一个编解码的d转载 2017-08-16 20:24:58 · 644 阅读 · 0 评论 -
netty入门学习
Netty框架入门一、概述 Netty是由JBOSS提供的一个java开源框架。 Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 二、体系结构图 三、Netty的核心结构 Netty是典型的Reactor模型结构,在实现上,Netty中的Boss类充当m转载 2017-07-25 16:19:55 · 315 阅读 · 0 评论 -
netty使用入门
package bhz.netty.helloworld;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFutureListener;import io.netty.channel.ChannelHandlerAdapter;im转载 2017-06-29 20:56:51 · 324 阅读 · 0 评论 -
netty中添加处理器讲解
netty中我们会添加一些处理器,如果对其添加流程及内部结构不清楚经常会出现各种问题,我先给出一幅处理器整体排版图addFist添加Handler是将Handler放在Head后面addLast添加Handler是将Handler放在Tail的前面消息接收时是从Head开始向Tail流动直到某个handler没有将事件传递下去,或者tail结束(事件未传递是对应handler未调用...原创 2019-05-31 10:57:04 · 1539 阅读 · 0 评论