Netty实践场景
数据通信
如果需要考虑的是两台机器(甚至多台)怎么使用Netty进行通信。大体上分为三种:
1 第一种:使用长连接通道不断开的形式进行通信。也就是服务端和客户端的通道一直处于开启状态。
如果服务器性能足够好,并且我们的客户端数量也比较少的情况下,推荐这种方式。
2 第二种:一次性批量提交数据,采用短连接方式。也就是我们会把数据保存在本地临时缓冲区或者临时表里,
当达到临界值时一次性批量提交。又或者根据定时任务轮询提交。这种情况弊端是做不到实时性传输。对实施性不
高的应用程序中推荐使用。
3 第三种:可以使用一种特殊的长连接,在指定某一时间内,服务器与某客户端没有任何通信,则断开连接。
下次连接是客户端向服务器发送请求的时候,在次建立连接。但是这种模式我们需要考虑两个因素:
1 如何在超时(即服务器和客户端没有任何通信)后关闭通道?

使用 new ReadTimeoutHandler(5, TimeUnit.SECONDS);即可设置超时时间
关闭通道后又如何再次建立连接?
采用了一个小判断,每次在getChannelFuture()时判断是否需要重新连接。
2 客户端宕机时,我们无需考虑。下次客户端重启之后我们就可以与服务器建立连接,但是服务器宕机时我们的客户端如何与服务器建立连接呢?
服务端宕机的问题:
我们可以写一个定时任务,定时的(比如每隔一个小时)尝试与服务器建立连接,检测服务器是否处于可用状态,如果服务器宕机了则不再发送业务请求,直到定时检测发现服务器恢复正常。
心跳检测
使用socket通信一般会经常处理多个服务器之间的心跳检测,一般来讲我们去维护服务器集群,肯定要有一台或几台服务器主机(Master),然后还有N台(Slave),那么主机肯定要时刻知道自己下面所有的从服务器的各方面情况(比如磁盘使用情况,性能,CPU使用率等等),然后进行实时监控的功能,这种功能在分布式架构中叫做心跳检测或者心跳监控,如果跨网跨域还要考虑安全问题。最佳处理方式还是应该用一些框架实现,比如Netty就可以做这样一件事情。
可以使用sigar用于监控我们这个服务器的所有信息
Sigar全名是System Information Gatherer And Reporter,中文名是系统信息收集和报表工具。我是一个开源的工具,提供了跨平台的系统信息收集的API ,是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件。它用来从许多平台收集系统和处理信息。
这些平台包括:Linux,Windows,Solaris,AIX,HP-UX,FreeBSD和Mac OSX。
CPU信息:包括基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait)
文件系统信息:包括Filesystem、Size、Used、Avail、Use%、Type
事件信息:类似Service Control Manager
内存信息:物理内存和交换内存的总数、使用数、剩余数;RAM的大小
网络信息:包括网络接口信息和网络路由信息
进程信息:包括每个进程的内存、CPU占用数、状态、参数、句柄
IO信息:包括IO的状态,读写大小等
服务状态信息
系统信息:包括操作系统版本,系统资源限制情况,系统运行时间以及负载,JAVA的版本信息
1 首先客户端在发送请求时,channelActive方法中进行安全认证

2 服务端收到请求判断请求类型,如果请求参数为String类型则进行安全认证,给客户端回写认证信息

3 客户端通过判断服务端是否认证成功,使用线程池:Executors.newScheduledThreadPool(1);每隔三秒发送一次发送健康包检测




RequestInfo:省去get、set

客户端代码

服务端代码

Netty上传下载
Netty在上传时会将文件分成多个小块chunck,比方说:一个文件10M,Netty会用ChunckedWriteHandler(支持异步发送的码流(大文件传输)但不占用过多的内存,防止java内存溢出)类将这个文件拆分,比如说分成10份,每份1M分10次进行传输,将10次传输封装成1个response进行响应。这样做的好处,每次传输的内容小所以够快。
---------------------
作者:石印掌纹
来源:CSDN
原文:https://blog.csdn.net/LIAN_XL/article/details/79799072
版权声明:本文为博主原创文章,转载请附上博文链接!
Netty实践场景的更多相关文章
- 1、ZooKeeper 基本概念、使用方法、实践场景
ZooKeeper 基本概念 ZooKeeper 是面向分布式应用的协调服务,其实现了树形结构的数据模型(与文件系统类似),并且提供了简洁的编程原语.ZooKeeper 能够作为基础,用于构建更高层级 ...
- 京东的Netty实践,京麦TCP网关长连接容器架构
背景 早期京麦搭建 HTTP 和 TCP 长连接功能主要用于消息通知的推送,并未应用于 API 网关.随着逐步对 NIO 的深入学习和对 Netty 框架的了解,以及对系统通信稳定能力越来越高的要求, ...
- Netty实践与NIO原理
一.阻塞IO与非阻塞IO Linux网络IO模型(5种) (1)阻塞IO模型 所有文件操作都是阻塞的,以套接字接口为例,在进程空间中调用recvfrom,系统调用直到数据包到达且被复制到应用进程缓冲区 ...
- Google Protobuf结合Netty实践
1.Win版Protobuf代码生成工具下载: https://github.com/protocolbuffers/protobuf/releases 注意下载protoc-3.6.1-win32. ...
- Netty实践二(心跳检测)
我们使用Socket通信一般经常会处理多个服务器之间的心跳检测,一般来讲,我们去维护服务器集群,肯定要有一台或几台服务器主机(Master),然后还应该有N台(Slave),那么我们的主机肯定要时时刻 ...
- Netty实践一(数据通信)
我们需要了解下在真正项目应用中如何去考虑Netty的使用,大体上对于一些参数设置都是根据服务器性能决定的.这个不是最主要的. 我们需要考虑的问题是两台机器(甚至多台)使用Netty的怎样进行通信,大体 ...
- Netty实践
Netty是JBOSS针对网络开发的一套应用框架,它也是在NIO的基础上发展起来的.netty基于异步的事件驱动,具有高性能.高扩展性等特性,它提供了统一的底层协议接口,使得开发者从底层的网络协议(比 ...
- 宜人贷蜂巢API网关技术解密之Netty使用实践
一.背景 宜人贷蜂巢团队,由Michael创立于2013年,通过使用互联网科技手段助力金融生态和谐健康发展.自成立起一直致力于多维度数据闭环平台建设.目前团队规模超过百人,涵盖征信.电商.金融.社交. ...
- Netty中的坑(下篇)
其实这篇应该叫Netty实践,但是为了与前一篇名字保持一致,所以还是用一下坑这个名字吧. Netty是高性能Java NIO网络框架,在很多开源系统里都有她的身影,而在绝大多数互联网公司所实施的服务化 ...
随机推荐
- 4、java基础:JDK8接口新特性以及接口和抽象类区别
在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的,所以在JDK8之前, ...
- Python多个装饰器的顺序 转载
3.使用两个装饰器当一个装饰器不够用的话,我们就可以用两个装饰器,当然理解起来也就更复杂了,当使用两个装饰器的话,首先将函数与内层装饰器结合然后在与外层装饰器相结合,要理解@语法的时候到底执行了什么, ...
- Invariant Violation: requireNativeComponent: "RNCWKWebView" was not found in the UIManager.
react-native 0.60以上版本安装第三方库的时候会autolink 出现这个问题是 我安装 react-native-webview 之后运行 ios出现的,这是因为ios 没有自动安 ...
- 对SPI进行参数化结构设计
前言 为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸. SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有3线和四线. SPI slave有啥用呢,当外部主 ...
- 【Linux】Linux基本命令
一.Linux关机 shutdown -h 10 10min后关机 shutdown -h 10:00 10:00关机 shutdown -h now 或 halt 或 poweroff 立即关机 ...
- Spring Boot实现自定义注解
在Spring Boot项目中可以使用AOP实现自定义注解,从而实现统一.侵入性小的自定义功能. 实现自定义注解的过程也比较简单,只需要3步,下面实现一个统一打印日志的自定义注解: 1. 引入AOP依 ...
- mesos-master启动失败,报错Failed to load unknown flag 'quorum.rpmsave'
[现象] mesos启动失败,查看mesos状态报错: [root@hps102 ~]# systemctl status mesos-master ● mesos-master.service - ...
- 《OAuth2.0协议安全形式化分析-》----论文摘抄整理
---恢复内容开始--- 本篇论文发表在计算机工程与设计,感觉写的还是很有水准的.实验部分交代的比较清楚 本篇论文的创新点: 使用Scyther工具 主要是在 DY模型下面 形式化分析了 OAuth2 ...
- Pycharm----破解码的获取
网站:http://idea.lanyus.com/ 复制后,粘贴到pycharm中的激活即可
- Display Tag Lib Table进行分页
Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页.数据导出.分组.对列排序等等,反正我在做项目时需要的功能它都给我提供了,而且使用起 ...