手动实践
文章平均质量分 92
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
手写一个简易聊天室
分不清轮询、长轮询?不知道什么时候该用websocket还是SSE,看这篇就够了。所谓的“实时推送”,从表面意思上来看是,客户端订阅的内容在发生改变时,服务器能够实时地通知客户端,进而客户端进行相应地反应。客户端不需要主观地发送请求去获取自己关心的内容,而是由服务器端进行“推送”。注意上面的推送二字打了引号,这就意味着在现有的几种实现方式中,并不是服务器端主动地推送,而是通过一定的手段营造了一种实时的假象。就目前现有的几种技术而言,主要有以下几类: 客户端轮询:传统意义上的轮询(Short P原创 2021-05-17 01:32:48 · 178 阅读 · 0 评论 -
手写一个简版的 Redis,实现高性能的 key-value 服务
今天主要介绍两个开源项目,然后创建应用最终实现的效果就像简版的redis服务那样,通过http的get请求,能够插入和获取数据,项目暂取名为kedis,源码后面会上传到git仓库。他们分别是Facebook开源的Rocksdb和netty实现的http容器RestExpress。通过实现这样的一个key/value系统实例来学习这两个框架的使用。rocksdb项目地址:https://github.com/facebook/rocksdbRocksDB是一个带key/value接口的存储引擎原创 2021-05-01 12:21:03 · 99 阅读 · 0 评论 -
手动热加载
Java ClassLoader 简述Java中的类从被加载到内存中到卸载出内存为止,一共经历了七个阶段:加载、验证、准备、解析、初始化、使用、卸载。接下来我们重点讲解加载和初始化这两步加载在加载的阶段,虚拟机需要完成以下三件事: 通过一个类的全限定名来获取定义此类的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 这三步都是通原创 2021-04-12 23:00:11 · 84 阅读 · 0 评论 -
手动API网关
一、背景最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,我的网关ship-gate核心功能基本都已完成,最大的缺陷就是前端功底太差没有管理后台????。二、设计2.1 技术选型网关是所有请求的入口,所以要求有很高的吞吐量,为了实现这点可以使用请求异步化来解决。目前一般有以下两种方案: Tomcat/Jetty+NIO+Servlet3 Servlet3已经支持异步,这种方案使用比较多,京东,有赞和Zuul,都用的是这原创 2021-03-26 04:49:46 · 144 阅读 · 0 评论 -
手写RPC框架
一、前言前段时间看到一篇不错的文章《看了这篇你就会手写RPC框架了》,于是便来了兴趣对着实现了一遍,后面觉得还有很多优化的地方便对其进行了改进。主要改动点如下: 除了Java序列化协议,增加了protobuf和kryo序列化协议,配置即用。 增加多种负载均衡算法(随机、轮询、加权轮询、平滑加权轮询),配置即用。 客户端增加本地服务列表缓存,提高性能。 修复高并发情况下,netty导致的内存泄漏问题 由原来的每个请求建立一次连接,改为建立TCP长连接,并多原创 2021-03-26 04:47:49 · 133 阅读 · 0 评论