Netty

Netty 如何实现心跳机制与断线重连?

最后都变了- 提交于 2020-05-08 16:32:22
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 注:心跳包还有另一个作用,经常被忽略,即: 一个连接如果长时间不用,防火墙或者路由器就会断开该连接。 如何实现 核心Handler —— IdleStateHandler 在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢? 先看下它的构造器: public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) { this((long)readerIdleTimeSeconds, (long)writerIdleTimeSeconds, (long)allIdleTimeSeconds, TimeUnit.SECONDS); } 这里解释下三个参数的含义: readerIdleTimeSeconds: 读超时. 即当在指定的时间间隔内没有从 Channel 读取到数据时, 会触发一个 READER_IDLE 的

Netty 如何实现心跳机制与断线重连?

筅森魡賤 提交于 2020-05-08 16:02:11
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 注:心跳包还有另一个作用,经常被忽略,即: 一个连接如果长时间不用,防火墙或者路由器就会断开该连接。 如何实现 核心Handler —— IdleStateHandler 在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢? 先看下它的构造器: public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) { this((long)readerIdleTimeSeconds, (long)writerIdleTimeSeconds, (long)allIdleTimeSeconds, TimeUnit.SECONDS); } 这里解释下三个参数的含义: readerIdleTimeSeconds: 读超时. 即当在指定的时间间隔内没有从 Channel 读取到数据时, 会触发一个 READER_IDLE 的

《精通并发与Netty》学习笔记(12

一世执手 提交于 2020-05-08 03:21:03
一、SocketChannel Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。 打开 SocketChannel 下面是SocketChannel的打开方式: SocketChannel socketChannel = SocketChannel.open(); socketChannel.connect( new InetSocketAddress("http://jenkov.com", 80)); 关闭 SocketChannel 当用完SocketChannel之后调用SocketChannel.close()关闭SocketChannel: socketChannel.close(); 从 SocketChannel 读取数据 要从SocketChannel中读取数据,调用一个read()的方法之一。以下是例子: ByteBuffer buf = ByteBuffer.allocate(48 ); int bytesRead = socketChannel.read(buf); 首先,分配一个Buffer

JAVA工程师必学技能,进阶&涨薪的推进器!这份实战教程请收下

半城伤御伤魂 提交于 2020-05-08 03:06:35
Netty 作为互联网中间件的基石,是 JAVA 工程师进阶为高级程序员必备的能力之一 。也是目前是互联网中间件领域使用最广泛最核心的网络通信框架。 Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持;无论是在互联网领域、分布式计算领域,还是通信行业,游戏领域都有广泛的应用。 今天给大家介绍的这个教程,跟你平时学习的教程不太一样。这是一个通过实战操作来学习Netty的教程。会用由浅入深的概念+代码的方式,快速让人理解并上手 Netty 。 因为这项技能对于JAVA工程师是非常重要的技能,学习也需要一定的基础。简单的东西没有太大价值。你需要是这样的人: 有基础的Java开发能力,自我突破的强烈欲望;具有一定Java网络编程能力,想要了解入门Netty。 知识点如下: 1:IO 基础入门 2:JAVA 网络编程 3:netty 入门 4:TCP 粘包/拆包 5:netty 编解码器 6:序列化传输 7:HTTP 服务器开发 8:深入 Netty ByteBuf 所以基本上,如果用心学完的话,收获还是会非常大的:Linux 网络模型/JAVA 原生网络编程/Netty 网络编程/HTTP 协议以及 HTTP 服务器的开发。 好啦废话不多少,上教程地址:>> http://t.cn/EozjS6O。 对于网络编程不熟悉的同学,也可以先了解下网络 I

Kafka服务不可用(宕机)问题踩坑记

。_饼干妹妹 提交于 2020-05-07 16:06:44
背景 某线上日志收集服务报警,打开域名报502错误码。 收集服务由2台netty HA服务器组成,netty服务器将客户端投递来的protobuf日志解析并发送到kafka,打开其中一个应用的日志,发现如下报错: org .apache .kafka .common .errors .TimeoutException: Expiring 1 record(s) 在排除了netty服务的错误之后,去查看kafka的日志。 发现报错,排查过程如下; 配置信息 系统 kafka版本 broker数量 CentOS7.4 2.1.0 3 线上有三台Kafka Broker,id分别为0、1、2,服务器只部署了Kafka服务。 问题 线程是否存活 首先jps查看Kafka线程是否存活,三台机器都没问题,kafka依然在运行。 GC问题 查看kafkaServer-gc.log.1.current的日志,gc日志没发现异常。 Broker 0/server.log [2019-08-02 15:17:03,699] WARN Attempting to send response via channel for which there is no open connection, connection id 172.21.3.14:9092-172.21.3.11:54311-107706

Java并发编程中的若干核心技术,向高手进阶!

谁说胖子不能爱 提交于 2020-05-07 14:48:42
来源:简书 http://www.jianshu.com/p/5f499f8212e7 引言 本文试图从一个更高的视角来总结Java语言中的并发编程内容,希望阅读完本文之后,可以收获一些内容,至少应该知道在Java中做并发编程实践的时候应该注意什么,应该关注什么,如何保证线程安全,以及如何选择合适的工具来满足需求。 当然,更深层次的内容就会涉及到JVM层面的知识,包括底层对Java内存的管理,对线程的管理等较为核心的问题,当然,本文的定位在于抽象与总结,更为具体而深入的内容就需要自己去实践,考虑到可能篇幅过长、重复描述某些内容,以及自身技术深度等原因,本文将在深度和广度上做一些权衡,某些内容会做一些深入的分析,而有些内容会一带而过,点到为止。 总之,本文就当是对学习Java并发编程内容的一个总结,以及给那些希望快速了解Java并发编程内容的读者抛砖引玉,不足之处还望指正。 Java线程 一般来说,在java中实现高并发是基于多线程编程的,所谓并发,也就是多个线程同时工作,来处理我们的业务,在机器普遍多核心的今天,并发编程的意义极为重大,因为我们有多个cpu供线程使用,如果我们的应用依然只使用单线程模式来工作的话,对极度浪费机器资源的。所以,学习java并发知识的首要问题是:如何创建一个线程,并且让这个线程做一些事情? 这是java并发编程内容的起点,下面将分别介绍多个创建线程

【多线程高并发编程】二 实现多线程的几种方式

限于喜欢 提交于 2020-05-07 13:46:42
程序猿学社的GitHub,欢迎 Star https://github.com/ITfqyd/cxyxs 本文已记录到github,形成对应专题 文章目录 前言: 1.什么是多线程? 1.1应用场景 2.实现一个多线程的常见几种方式 通过继承的方式,实现多线程(第一种) 通过实现runnable接口,实现多线程(第二种) 匿名内部类实现(第三种) Runnable方式 继承类方式 通过Callable实现多线程(第四种) 启动一个main线程,启动了几个线程 多个线程进行测试 前言: 上章,我们已经了解线程的一些基本概念。本文我们来看看多线程的应用场景,为什么要用多线程,以及实现一个多线程有几种方式。 1.什么是多线程? 多线程 是指通过软件优化和硬件(CPU)的方式,同时并发运行多个线程(任务)。更好的运行系统的资源。 例如 ,社长,很久以前,接到boss的提的一个业务,需要开发一个充电桩管理物联网管理平台,实现通过网站,查看各个充电桩的情况。如果就社长一个人开发,感觉1年搞定都有点难,毕竟社长专注于后端开发,这时社长就跟boss提出,需要增加人马,招一个前端,一个后端。社长就负责跟硬件对接,每个人负责一块,各种同步开发。最后,通过社长三人的努力,半年就交差了。这就是多线程的好处。多个人,信息也是共享(一个进程内的多个线程,资源是共享在同一个内存中) 1.1应用场景

2020 java Dubbo面试题及答案(最全版本持续更新)

╄→гoц情女王★ 提交于 2020-05-07 12:55:05
前言 涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文末自取pdf. 1、为什么要用 Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术, 如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。 2、Dubbo 的整体架构设计有哪些分层? 接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现 配置层(Config):对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心 服务代理层(Proxy):服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory 服务注册层(Registry):封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry

NIO-FileChannel源码分析

妖精的绣舞 提交于 2020-05-07 02:45:37
NIO-FileChannel源码分析 目录 NIO-概览 NIO-Buffer NIO-Channel NIO-Channel接口分析 NIO-SocketChannel源码分析 NIO-FileChannel源码分析 NIO-Selector源码分析 NIO-WindowsSelectorImpl源码分析 NIO-EPollSelectorIpml源码分析 前言 本来是想学习Netty的,但是Netty是一个NIO框架,因此在学习netty之前,还是先梳理一下NIO的知识。通过剖析 源码 理解NIO的设计原理。 本系列文章针对的是JDK1.8.0.161的源码。 上一篇 对SocketChannel的源码进行了分析,本篇继续对FileChannel的源码进行解析。 RandomAccessFile 我们可以通过使用 RandomAccessFile 读写数据。也可以通过 FileInputStream 读数据或通过 FileOutputStream 写数据。但实际这三个类内部实际是一样的,我们就以 RandomAccessFile 为例子说明 FileChannelImpl 的实现。 接口 RandomAccessFile 实现了 DataInput 和 DataOutput 两个接口,即数据输入和输出接口。 public class RandomAccessFile

程序员都闯过多大的篓子?网友:差点把公司搞黄

喜欢而已 提交于 2020-05-07 00:04:46
对于互联网公司而言,程序员的重要性不言而喻,因为大部分互联网公司都是虚拟资产,比如各种各样的程序等,而这些都是程序员研发的成果,可谓牵一发而动全身。如果这些程序经过了错误的处理,很可能会酿成大祸甚至灭顶之灾,轻则损失收益,重则有可能将公司搞黄。有程序员圈子就开启了这个讨论话题:作为程序员,你都闯过多大的篓子? 对于这样的话题,各路程序员的答案有如下几种:订单分不出去,损失几千万的流水;损失900万条用户数据;测试环境内容推给用户;不小心把公司核心用户所有数据删除,1分钟后办公室电话被打爆,还好有备份;实验环境的一台服务器直接删掉root目录。 最狠的是这名网友的回复:差点把公司搞黄! 不要以为这些程序员是在开玩笑,这些都是有真实案例的。曾经有某个智能硬件公司,其程序员原本是打算在测试环境进行测试,但不小心上传到了正式的生产环境,导致大量用户数据错乱,传导到消费者便是设备工作状态失效,瞬间各路客户的投诉就像雪片般飞来;还有一个创业的互联网小公司,某名核心程序员受到了不公正的待遇被迫离职,在受够了领导的嘴脸之后,这名程序员精心策划了一条删库之路,直接导致该公司瘫痪破产,虽然公司知道这名核心程序员做了手脚,但无奈找不到证据,只能自食其果。所以,千万不要得罪程序员! 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis