Netty
文章平均质量分 95
crossoverJie
会crossover的程序猿
展开
-
Netty(一) SpringBoot 整合长连接心跳机制
前言Netty 是一个高性能的 NIO 网络框架,本文基于 SpringBoot 以常见的心跳机制来认识 Netty。最终能达到的效果:客户端每隔 N 秒检测是否需要发送心跳。服务端也每隔 N 秒检测是否需要发送心跳。服务端可以主动 push 消息到客户端。基于 SpringBoot 监控,可以查看实时连接以及各种应用信息。效果如下:IdleSta...原创 2018-05-29 10:23:44 · 8806 阅读 · 0 评论 -
一致性 Hash 算法的实际应用
前言记得一年前分享过一篇《一致性 Hash 算法分析》,当时只是分析了这个算法的实现原理、解决了什么问题等。但没有实际实现一个这样的算法,毕竟要加深印象还得自己撸一遍,于是本次就当前的一个路由需求来着手实现一次。背景看过《为自己搭建一个分布式 IM(即时通讯) 系统》的朋友应该对其中的登录逻辑有所印象。先给新来的朋友简单介绍下 cim 是干啥的:其中有一个场景是在客户端登录成功...原创 2019-03-01 08:42:24 · 279 阅读 · 0 评论 -
长连接的心跳及重连设计
前言说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的。顾名思义就是证明是否还活着的依据。什么场景下需要心跳呢?目前我们接触到的大多是一些基于长连接的应用需要心跳来“保活”。由于在长连接的场景下,客户端和服务端并不是一直处于通信状态,如果双方长期没有沟通则双方都不清楚对方目前的状态;所以需要发送一段很小的报文告诉对方“我还活着”。同时还有另外几个目的:服...原创 2019-01-23 08:53:24 · 432 阅读 · 0 评论 -
为自己搭建一个分布式 IM 系统二【从查找算法聊起】
前言最近这段时间确实有点忙,这篇的目录还是在飞机上敲出来了的。言归正传,上周更新了 cim 第一版:为自己搭建一个分布式 IM(即时通讯) 系统;没想到反响热烈,最高时上了 GitHub Trending Java 版块的首位,一天收到了 300+ 的 star。现在总共也有 1.3K+ 的 star,有几十个朋友参加了测试,非常感谢大家的支持。在这过程中也收到一些 bug 反馈,...原创 2019-01-14 09:01:42 · 444 阅读 · 0 评论 -
为自己搭建一个分布式 IM(即时通讯) 系统
前言大家新年快乐!新的一年第一篇技术文章希望开个好头,所以元旦三天我也没怎么闲着,希望给大家带来一篇比较感兴趣的干货内容。老读者应该还记得我在去年国庆节前分享过一篇《设计一个百万级的消息推送系统》;虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码;这么久了是时候把坑填上了。目录结构:本文较长,高能预警;带好瓜子板凳。于是在之前的基础上我完善了一些...原创 2019-01-02 08:10:42 · 5848 阅读 · 2 评论 -
设计一个可拔插的 IOC 容器
前言磨了许久,借助最近的一次通宵上线 cicada 终于更新了 v2.0.0 版本。之所以大的版本号变为 2,确实是向下不兼容了;主要表现为:修复了几个反馈的 bug。灵活的路由方式。可拔插的 IOC 容器选择。其中重点是后面两个。新的路由方式先来看第一个:路由方式的更新。在之前的版本想要写一个接口必须的实现一个 WorkAction;而且最麻烦的是一个实现类只能做一个接口...原创 2018-11-15 08:43:39 · 568 阅读 · 3 评论 -
利用责任链模式设计一个拦截器
前言近期在做 Cicada 的拦截器功能,正好用到了责任链模式。这个设计模式在日常使用中频率还是挺高的,借此机会来分析分析。责任链模式先来看看什么是责任链模式。引用一段维基百科对其的解释:责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该...原创 2018-10-22 08:19:52 · 207 阅读 · 0 评论 -
设计一个百万级的消息推送系统
前言首先迟到的祝大家中秋快乐。最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两天原创 2018-09-25 08:32:59 · 826 阅读 · 2 评论 -
「造个轮子」——cicada 设计一个配置模块
前言在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口、路由的配置。因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议。最终其实还是按照我之前的想法来做了这个配置管理。 同时将 cicada 升级到了 v1.0.2。目标在做之前是要把需求想好,到底怎样的一个配置管理是对开发人员来说比较友好的?我认为有以下...原创 2018-09-14 08:56:52 · 134 阅读 · 0 评论 -
「造个轮子」——cicada(轻量级 WEB 框架)
前言俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围。创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式。好了,现在着重来谈谈 cicada 这个项目的核心功能。我把他定义为一个快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。也仅需要一行代码即可启动一个 HTTP 服务。特性现...原创 2018-09-03 08:58:24 · 262 阅读 · 1 评论 -
「造个轮子」——cicada 源码分析
前言两天前写了文章《「造个轮子」——cicada(轻量级 WEB 框架)》 向大家介绍了 cicada 之后收到很多反馈,也有许多不错的建议。同时在 GitHub 也收获了 80 几颗 小♥♥(绝对不是刷的。。)也有朋友希望能出一个源码介绍,本文就目前的 v1.0.1 版本来一起分析分析。 没有看错,刚发布就修复了一个 bug,想要试用的请升级到 1.0.1 吧...原创 2018-09-05 08:57:50 · 272 阅读 · 0 评论 -
如何成为一位「不那么差」的程序员
前言已经记不清有多少读者问过: 博主,你是怎么学习的?像我这样的情况有啥好的建议嘛?也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。因此也许诺会准备一篇关于学习方面的文章;所以本文其实准备了很久,篇幅较长,大家耐心看完希望能有收获。 以下内容仅代表我从业以来所积累的相关经验,我会从硬技能、软实力这些方面尽量阐述我所认为的 “不...原创 2018-08-13 08:29:15 · 388 阅读 · 1 评论 -
Netty(三) 什么是 TCP 拆、粘包?如何解决?
前言记得前段时间我们生产上的一个网关出现了故障。这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信。但这个请求并不是常见的 HTTP ,而是利用 Netty 自定义的协议。 有个前提是:网关是需要读取一段完整的报文才能进行后面的逻辑。问题是有天突然发现网关解析报文出错,查看了客户端的发送日志也没发现问题,最后通过日志发现收到了许多不完整的报文,有些...原创 2018-08-06 08:08:05 · 233 阅读 · 0 评论 -
Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
前言在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty。但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚。本文就来从历史源头说道说道。传统 IO在 Netty 以及 NIO 出现之前,我们写 IO 应用其实用的都是用 java.io.* 下所提供的包。 比如下面的伪代码:ServeSocket serve...原创 2018-07-04 13:23:19 · 275 阅读 · 0 评论 -
设计一个全局异常处理器
前言最近稍微闲了一点于是把这个半年都没更新的开源项目 cicada 重新捡了起来。一些新关注的朋友应该还不知道这项目是干啥的?先来看看官方介绍吧(其实就我自己写的原创 2019-07-15 08:44:25 · 199 阅读 · 1 评论