
手写Netty通信框架
文章平均质量分 52
手把手还原最牛通信框架的底层是怎么实现的。
码农~明哥
七年 IT工程师一名 现目前在基金投研公司担任java 大数据开发工程师 天天不是在写软件就是在写bug的路上。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
netty之手写rpc框架-自定义配置xml
远程过程调用协议 RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。原创 2024-10-04 15:37:45 · 806 阅读 · 0 评论 -
netty之Netty集群部署实现跨服务端通信的落地方案
在一些小型用户体量的socket服务内,仅部署单台机器就可以满足业务需求。但当遇到一些中大型用户体量的服务时,就需要考虑讲Netty按照集群方式部署,以更好的满足业务诉求。但Netty部署集群后都会遇到跨服务端怎么通信,也就是有集群服务X和Y,用户A链接服务X,用户B链接服务Y,那么他们都不在一个服务内怎么通信?本章节将介绍一种实现方式案例,以满足跨服务之间的用户通信。涉及到的技术点1:跨服务之间案例采用redis的发布和订阅进行传递消息,如果你是大型服务可以使用zookeeper。原创 2024-10-04 10:55:07 · 1292 阅读 · 0 评论 -
netty之Netty心跳服务与断线重连
使用netty中,需要监测服务是否稳定以及在网络异常链接断开时候可以自动重连。需要实现监听;代码目录结构@OverrideSystem.out.println("client start done. {关注明哥,获取源码}");return;@Overridetry {System.out.println("client start done. {关注明哥,获取源码}");原创 2024-10-04 10:37:12 · 447 阅读 · 0 评论 -
netty之Netty请求响应同步通信
实现开发RPC框架的时候,需要选择socket的通信方式。而我们知道一般情况下socket通信类似与qq聊天,发过去消息,什么时候回复都可以。但是我们RPC框架通信,从感觉上类似http调用,需要在一定时间内返回,否则就会发生超时断开。这里我们选择netty作为我们的socket框架,采用future方式进行通信。= null) {@Override//失败移除if (!});} else {原创 2024-10-04 10:25:46 · 517 阅读 · 0 评论 -
netty之SpringBoot+Netty+Elasticsearch收集日志信息数据存储
将大量的业务以及用户行为数据存储起来用于分析处理,但是由于数据量较大且需要具备可分析功能所以将数据存储到文件系统更为合理。尤其是一些互联网高并发级应用,往往数据库都采用分库分表设计,那么将这些分散的数据通过binlog汇总到一个统一的文件系统就显得非常有必要。#开发环境环境准备windows安装包 下载注意 es是以来java环境 所以需要安装jdk 支持1.7以上es-hander下载可视化操作插件@Id//姓名//年龄//级别//时间//电话//邮箱//地址。原创 2024-10-04 10:08:05 · 1131 阅读 · 0 评论 -
netty之基于Netty搭建WebSocket,模仿微信聊天页面
模仿微信聊天页面,开发一个基于Netty搭建WebSocket通信案例。聊天、MQ、RPC、数据等等,在5G到来的时候更加需要大量数据传输,Netty的应用也会更加广阔。2:使用Netty提供的HttpServerCodec、HttpObjectAggregator、3:ChunkedWriteHandler进行编码解码处理。好了到这里就结束了netty之基于Netty搭建WebSocket,模仿微信聊天页面的学习,大家一定要跟着动手操作起来。通信逻辑尽可能简化到只了解根本,便于后续个人应用及开发的拓展。原创 2024-10-03 12:43:29 · 627 阅读 · 0 评论 -
netty之Netty传输文件、分片发送、断点续传
1:在实际应用中我们经常使用到网盘服务,他们可以高效的上传下载较大文件。那么这些高性能文件传输服务,都需要实现的分片发送、断点续传功能。2:在Java文件操作中有RandomAccessFile类,他可以支持文件的定位读取和写入,这样就满足了我们对文件分片的最基础需求。3:Netty服务端启动后,可以向客户端发送文件传输指令;允许接收文件、控制读取位点、记录传输标记、文件接收完成。4:为了保证传输性能我们采用protostuff二进制流进行传输。@Override//对象传输处理。原创 2024-10-03 11:59:46 · 1002 阅读 · 0 评论 -
netty之Netty传输Java对象
Netty在实际应用级开发中,有时候某些特定场景下会需要使用Java对象类型进行传输,但是如果使用Java本身序列化进行传输,那么对性能的损耗比较大。为此我们需要借助protostuff-core的工具包将对象以二进制形式传输并做编码解码处理。与直接使用protobuf二进制传输方式不同,这里不需要定义proto文件,而是需要实现对象类型编码解码器,用以传输自定义Java对象。@Override//对象传输处理// 在管道中添加我们自己的接收数据实现方法/**原创 2024-10-03 11:07:32 · 516 阅读 · 0 评论 -
netty之Netty使用Protobuf传输数据
在netty数据传输过程中可以有很多选择,比如;字符串、json、xml、java对象,但为了保证传输的数据具备;良好的通用性、方便的操作性和传输的高性能,我们可以选择protobuf作为我们的数据传输格式。目前protobuf可以支持;C++、C#、Dart、Go、Java、Python等,也可以在JS里使用。知识点;@Override//protobuf 处理// 在管道中添加我们自己的接收数据实现方法/*** 当客户端主动链接服务端的链接后,这个通道就是活跃的了。原创 2024-10-03 10:49:27 · 578 阅读 · 0 评论 -
netty之Netty与SpringBoot整合
在实际的开发中,我们需要对netty服务进行更多的操作,包括;获取它的状态信息、启动/停止、对客户端用户强制下线等等,为此我们需要把netty服务加入到web系统中。@Override// 基于换行符号// 解码转String,注意调整自己的编码格式GBK、UTF-8// 解码转String,注意调整自己的编码格式GBK、UTF-8// 在管道中添加我们自己的接收数据实现方法/*** 当客户端主动链接服务端的链接后,这个通道就是活跃的了。原创 2024-10-03 01:17:39 · 733 阅读 · 0 评论 -
netty之自定义编码解码器,处理半包、粘包数据
只要是支持sokcet通信的都可以和Netty交互,比如中继器、下位机、PLC等。这些场景下就非常需要自定义编码解码器,来处理字节码传输,并控制半包、粘包以及安全问题@Override//自定义解码器//自定义编码器//在管道中添加我们自己的接收数据实现方法@OverrideSystem.out.println("链接报告开始 {关注我 >获取学习源码}");System.out.println("链接报告信息:有一客户端链接到本服务端");原创 2024-10-02 17:00:59 · 621 阅读 · 0 评论 -
netty之NettyClient半包粘包处理、编码解码处理、收发数据方式
Netty开发中,客户端与服务端需要保持同样的;半包粘包处理,编码解码处理、收发数据方式,这样才能保证数据通信正常。在前面NettyServer的章节中我们也同样处理了;半包粘包、编码解码等,为此在本章节我们可以把这些知识模块开发到NettyClient中。本章节涉及到的知识点有;LineBasedFrameDecoder、StringDecoder、StringEncoder、ChannelInboundHandlerAdapter等@Override// 基于换行符号。原创 2024-10-02 16:47:42 · 452 阅读 · 0 评论 -
netty之NettyClient
使用socket模拟器链接我们的NettyServer,进行通信测试。本章节我们写一个helloworld版的NettyClient客户端,与我们的socket模拟器进行通信。在netty中客户端与服务端的写法基本类似,注意一些细节即可,这也是netty的强大之处,它把nio流与sokcet封装的相当简单易用。@OverrideSystem.out.println("链接报告开始");System.out.println("链接报告信息:本客户端链接到服务端。原创 2024-10-02 11:39:35 · 746 阅读 · 0 评论 -
netty之NettyServer群发消息
在微信或者QQ的聊天中我们经常会用到一些群聊,把你的信息发送给所有用户。那么为了实现群发消息,在netty中我们可以使用ChannelGroup方式进行群发消息。如果为了扩展验证比如你实际聊天有不同的群,那么可以定义ConcurrentHashMap结构来存放ChannelGroup。ChannelGroup中提供了一些基础的方法;添加、异常、查找、清空、发放消息、关闭等。新建ChannelHandler//用于存放用户Channel信息,也可以建立map结构模拟不同的消息群。原创 2024-10-02 11:31:05 · 638 阅读 · 0 评论 -
netty之NettyServer字符串编码器
netty通信就向一个流水channel管道,我们可以在管道的中间插入一些‘挡板’为我们服务。比如字符串的编码解码,在前面我们使用new StringDecoder(Charset.forName(“GBK”))进行字符串解码,这样我们在收取数据就不需要手动处理字节码。那么本章节我们使用与之对应的new StringEncoder(Charset.forName(“GBK”))进行进行字符串编码,用以实现服务端在发送数据的时候只需要传输字符串内容即可。@Override// 基于换行符号。原创 2024-10-02 11:20:17 · 503 阅读 · 0 评论 -
netty之NettyServer收发数据
服务端在收到数据后,通过writeAndFlush发送ByteBuf字节码向客户端传输信息。因为我们使用客户端模拟器的编码是GBK格式,所以代码中也需要将字节码转换为GBK,否则会乱码。@Override// 基于换行符号// 解码转String,注意调整自己的编码格式GBK、UTF-8// 在管道中添加我们自己的接收数据实现方法/*** 当客户端主动链接服务端的链接后,这个通道就是活跃的了。也就是客户端与服务端建立了通信通道并且可以传输数据*/@Override。原创 2024-10-02 11:10:23 · 464 阅读 · 0 评论 -
netty之NettyServer字符串解码器
在实际开发中,server端接收数据后我们希望他是一个字符串或者是一个对象类型,而不是字节码,那么;在netty中是否可以自动的把接收的Bytebuf数据转String,不需要我手动处理?答;有,可以在管道中添加一个StringDecoder。在网络传输过程中有半包粘包的问题,netty能解决吗?答:能,netty提供了很丰富的解码器,在正确合理的使用下就能解决半包粘包问题。常用的String字符串下有什么样的解码器呢?原创 2024-10-02 10:57:33 · 482 阅读 · 0 评论 -
netty之NettyServer接收数据
对于一个初学者,不建议上来就研究理论,实操往往更重要。本章节介绍使用netty端写一个能接收数据的socketServer服务端,通过实现通道适配器ChannelInboundHandlerAdapter.channelRead获取并并解析接收数据一:MyChannelInitializer@OverrideSystem.out.println("链接报告开始");System.out.println("链接报告信息:有一客户端链接到本服务端");原创 2024-10-02 10:46:35 · 644 阅读 · 0 评论 -
netty之NettyServer
新知识都需要有个入门的案例,一个简单的输入输出就能解除你当前遇到的所有疑惑。不要总想着先学理论后学实战。maven依赖目录结构nettyServer端代码//配置服务端NIO线程组try {.channel(NioServerSocketChannel.class) //非阻塞模式System.out.println("com.lm.netty02 server start done. {关注明哥,获取源码}");通道初始化@Override。原创 2024-09-30 09:23:38 · 321 阅读 · 0 评论 -
netty之基础aio,bio,nio
在Java中,提供了一些关于使用IO的API,可以供开发者来读写外部数据和文件,我们称这些API为Java IO。IO是Java中比较重要知识点,且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能,目前有三种IO共存;分别是BIO、NIO和AIO。同步阻塞I/O模式是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。同步非阻塞模式NIO 与原来的 I/O 有同样的作用和目的, 他们之间最重要的区别是数据打包和传输的方式。原创 2024-09-30 08:58:47 · 907 阅读 · 0 评论