涉及技术   序列化.Socket通信.Java动态代理技术,反射机制   角色   1.服务提供者:运行在服务端,是真实的服务实现类   2.服务发布监听者:运行在RPC服务端,1将服务端提供的服务暴露为远程服务并2监听客户端请求3调用真实服务   3.客户端代理:运行在RPC客户端,通过该代理调用远程服务提供者,将结果封装返回本地消费者   4.客户端消费者:委托客户端代理实现透明的RPC调用   代码实现   (1)服务提供者代码实现   接口 public interface IRe…
来源:https://juejin.im/post/5c4481a4f265da613438aec3 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的服务就像调用本地方法一样,其中用到的知识有序列化和反序列化.动态代理.网络传输.动态加载.反射这些知识点.发现这些知识都了解一些.所以就想着试试自己实现一个简单的RPC框架,即巩固了基础的知识,也能更加深入的了解RPC原理.当然一个完整的RPC框架包含了许多的功能,例如服务的发现与治理,网关等等.本…
spring对于java程序员来说,无疑就是吃饭到筷子.在每次编程工作到时候,我们几乎都离不开它,相信无论过去,还是现在或是未来到一段时间,它仍会扮演着重要到角色.自己对spring有一定的自我见解,所以参考网上的视频和文章,整理出一套简单的SpirngMVC. 项目地址先贴出来,接下来大概讲下流程. 手写简单的SpringMvc框架. 主要分为几个步骤: 1. 扫描包下面的文件. 2. 根据扫描到到文件,初始化bean工厂. 3. 根据@Controller @RequestMapping 注…
说明 项目链接 微服务框架都包括什么? 如何实现 RPC 远程调用? 开源 RPC 框架 限定语言 跨语言 RPC 框架 本地 Docker 搭建 ZooKeeper 下载镜像 启动容器 查看容器日志 RPC 接口 Netty RPC server 接口实现 服务启动 注册服务 ZooKeeper 实现 Netty RPC Client 创建代理 远程调用 编解码 RpcDecoder RpcEncoder RpcServerInboundHandler Server 在 ZooKeeper 的…
C#基于Mongo的官方驱动手撸一个简易版MongoDB-ORM框架 如题,在GitHub上找了一圈想找一个MongoDB的的ORM框架,未偿所愿,就去翻了翻官网(https://docs.mongodb.com/drivers/csharp/) 看了看文档发现官方的驱动功能已经相当强大了并且更新速度很快 2.3之后得驱动版本已经支持 .Net 5,而且方法都已支持Task ,可以配合async , await.使用 ,同时也支持Lambda表达式及表达式树 官方是这么说的(https://mo…
rpc 全称 Remote Procedure Call 远程过程调用,即调用远程方法.我们调用当前进程中的方法时很简单,但是想要调用不同进程,甚至不同主机.不同语言中的方法时就需要借助 rpc 来实现,下面我一步步实现一个简单的 rpc 调用. server 端注册函数,运行并接收客户端请求 func main() { srv := NewServer() srv.Register("fn", fn) srv.Run() } //为了简单,这里只需要接收到消息打印出就代表执行成功 f…
目录: 需求 设计 实现 创建 maven 项目,导入 Netty 4.1.16. 项目目录结构 设计接口 提供者相关实现 消费者相关实现 测试结果 总结 源码地址:github 地址 前言 众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性能我们之前也分析过源码,对他也算还是比较了解了.今天我们就自己用 Netty 实现一个简单的 RPC 框架. 1. 需求 模仿 dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打…
在如何给老婆解释什么是RPC中,我们讨论了RPC的实现思路. 那么这一次,就让我们通过代码来实现一个简单的RPC吧! RPC的实现原理 正如上一讲所说,RPC主要是为了解决的两个问题: 解决分布式系统中,服务之间的调用问题. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑. 还是以计算器Calculator为例,如果实现类CalculatorImpl是放在本地的,那么直接调用即可:     现在系统变成分布式了,CalculatorImpl和调用方不在同一个地址空间,那么就…
众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性能我们之前也分析过源码,对他也算还是比较了解了. 今天我们就自己用 Netty 实现一个简单的 RPC 框架. 1 需求 模仿 dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打印提供者返回的数据.底层网络通信使用 Netty 4.1.16. 2 设计 创建一个接口,定义抽象方法.用于消费者和提供者之间的约定. 创建一个提供者,该类需要监听消费者的请求,并按照约定返回…
最近看的一个swoole的课程,前段时间被邀请的参与的这个课程 比较有特点跟一定的深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. 内容听下来还是蛮有水准的 课程简介: 部分课程截图:   下载链接: https://pan.baidu.com/s/1YQTrFTN4w_6u7UmNVa29IA提取码: i1cx 更多精彩内容:你每先多积累一分,时间越长你与其他人的差距就会越发明显,复利算法了解一下: BAT资深工程师由浅入深分析Tp…
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query篇 后续待定...... 姗姗来迟结尾 最近琐事缠身本应该上周就更新的文章,硬生生的拖到今天.实在抱歉,实在抱歉,实在抱歉!!!近期也不断为自己的职业生涯思考,两条路选择:技术路线?还是管理路线?不仅对自己目前状态进行深刻思考,还计划后面一段时间学习阅读优秀开源项目源码. 从前的少年 在<手撸ORM…
手撸一个springsecurity,了解一下security原理 转载自:www.javaman.cn 手撸一个springsecurity,了解一下security原理 今天手撸一个简易版本的springsecurity,带大家理解下springsecurity的原理: 安全框架的两个特点就是认证和授权,让我们来通过代码了解下认证和授权的处理方式: 1.认证 认证就是指需要登录才能进行系统操作,如:登录qq.微信或者是web系统的登录都是认证的过程 1.1 工程目录 1.2 maven配置p…
大家好,我是老三,Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌. 这节,我们回归Spring的本质,五分钟手撸一个Spring容器,揭开Spring神秘的面纱! 从什么是IOC开始? Spring--春天,Java编程世界的春天是由一位音乐家--Rod Johnson带来的. Rod Johnson先后编写了两本巨著<Expert One-on-One J2EE Design and Development>.<Expert…
原文连接:使用Java Socket手撸一个http服务器 作为一个java后端,提供http服务可以说是基本技能之一了,但是你真的了解http协议么?你知道知道如何手撸一个http服务器么?tomcat的底层是怎么支持http服务的呢?大名鼎鼎的Servlet又是什么东西呢,该怎么使用呢? 在初学java时,socket编程是逃不掉的一章:虽然在实际业务项目中,使用这个的可能性基本为0,本篇博文将主要介绍如何使用socket来实现一个简单的http服务器功能,提供常见的get/post请求支持…
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! 随着发际线后移高亮意识到优秀程序员写的优秀的ORM框架会做一些Sql优化,Sql优化不是一成不变的,ORM框架不会根据项目业务场景等主动优化Sql语句.如果ORM真的强大的到开发人员不需要关注Sql,会针对当前项目情况做出相对应很好的优化,必然会增加ORM框架的体积.带来性能等相关问题.知己知彼,…
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query篇 后续待定...... 合抱之木,生于毫末 反射 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的…
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query篇 后续待定...... 前人栽树,后人乘凉 BaseRepository->GetCurrentTableName.GetExcludeKeyAllFields已经在<手撸ORM浅谈ORM框架之Add篇>BaseRepository里面的方法,不重复搬砖了. 承上启下,传递希望 BaseR…
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query篇 后续待定...... 前人修路后人行 BaseRepository->GetCurrentTableName已经在<手撸ORM浅谈ORM框架之Add篇>BaseRepository里面的方法,不重复搬砖了. BaseRepository->GetKey已经在<手撸ORM浅谈O…
1. 简介 通过了解SpringBoot的原理后,我们可以手撸一个spring-boot-starter来加深理解. 1.1 什么是starter spring官网解释 starters是一组方便的依赖描述符(根据功能特点将用到的依赖标记封装到同一个pom中),可以将其包含在应用程序中. 通过starters可以获取所需的所有Spring和相关技术的一站式服务,而无需搜索示例代码或复制粘贴加载的依赖项描述符. 1.2 命名规则 所有官方首发都遵循类似的命名模式:spring-boot-start…
动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的,所以在这篇博客中,将实现一个简单的路由自定义功能 首先引入werkzeug中的两个工具,分别是Map,和Rule,需要通过以下代码引入 from werkzeug.routing import Map, Rule 这两个可以完成路由定义和匹配的基本实现,其次,还引入到werkzeug中的Reques…
Golang标准日志库提供的日志输出方法有Print.Fatal.Panic等,没有常见的Debug.Info.Error等日志级别,用起来不太顺手.这篇文章就来手撸一个自己的日志库,可以记录不同级别的日志. 其实对于追求简单来说,Golang标准日志库的三个输出方法也够用了,理解起来也很容易: Print用于记录一个普通的程序日志,开发者想记点什么都可以. Fatal用于记录一个导致程序崩溃的日志,并会退出程序. Panic用于记录一个异常日志,并触发panic. 不过对于用惯了Debug.I…
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI(Web Server Gateway Interface)定义了Web服务器与Web应用(或Web框架)之间的标准接口.在WSGI的规范下,各种各样的Web服务器和Web框架都可以很好的交互. 由于WSGI的存在,用Python写一个简单的Web框架也变得非常容易.然而,同很多其他的强大软件一样,要…
一个简单的web框架实现 #!/usr/bin/env python # -- coding: utf-8 -- __author__ = 'EchoRep' from wsgiref.simple_server import make_server def index(): # data = open('html/index.html').read() return data def echo(): # data = open('html/echo.html').read() return d…
我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一个sql语句工厂,用于生成sql语句.调用类型工厂 写了一个类型工厂,用于获取所需的类型,识别特性等. appsettings.json是配置文件 最后一个是使用说明 我实现过程的首先从底层开始. 首先写的是类型工厂 结构 BaseTypeHelper.cs 是基础的类型帮助类 TypeHelper…
阅读目录 一:封装node http server. 创建koa类构造函数. 二:构造request.response.及 context 对象. 三:中间件机制的实现. 四:错误捕获和错误处理. koa2源码文件如下结构: |-- lib | |--- application.js | |--- context.js | |--- request.js | |--- response.js |__ package.json application.js 是Koa2的入口文件,它封装了 cont…
我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一个sql语句工厂,用于生成sql语句.调用类型工厂 写了一个类型工厂,用于获取所需的类型,识别特性等. appsettings.json是配置文件 最后一个是使用说明 我实现过程的首先从底层开始. 首先写的是类型工厂 结构 BaseTypeHelper.cs 是基础的类型帮助类 TypeHelper…
接触过web开发的同学想必都接触过MVVM,业界著名的MVVM框架就有AngelaJS.今天闲来无事,决定自己实现一个简单的MVVM框架玩一玩.所谓简单,就是仅仅实现一个骨架,仅表其意,不摹其形. 分析 MVVM最大的特点莫过于双向绑定了,数据的变化能及时更新到视图上,同时视图的变化也能及时的更新到数据中. 那么怎么实现这样的双向绑定呢?最直接的方式莫过于事件了. 所以,我们需要实现一个事件的订阅与分发机制,这个功能很常见,网上搜一搜一大堆. 有了这么一套事件的订阅与分发机制,我们就可以通过它将…
[手撸一个ORM]第一步.约定和实体描述 [手撸一个ORM]第二步.封装实体描述和实体属性描述 [手撸一个ORM]第三步.SQL语句构造器和SqlParameter封装 [手撸一个ORM]第四步.Expression(表达式目录树)扩展 [手撸一个ORM]第五步.查询条件表达式目录树解析和插入.更新查询目录树解析 [手撸一个ORM]第六步.对象表达式解析和Select表达式解析 [手撸一个ORM]第七步.SqlDataReader转实体 [手撸一个ORM]第八步.实体查询和按需查询 [手撸一个O…
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种…
前言 继上一篇使用Flutter开发的抖音国际版 后再次撸一个国内版抖音,大部分功能已完成,主要是Flutter开发APP速度很爽,  先看下图 项目主要结构介绍 这次主要的改动在api.dart 及douyin.dart里,国内抖音的api是不同的,另外地址以及实体类也不一样.详细下面介绍. 抖音的实体类 主要是讲json转化为实体模型,然后绑定到view 层面,写这个实体类还是很耗费时间的,毕竟得先用爬网知识讲抖音的json拿到,并且根据json反向写实体类. 这个地址获取到抖音的推荐列表j…