首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Golang语言社区

    go rpc 源码分析

    1.概述 go 源码中带了rpc框架,以相对精简的当时方式实现了rpc功能,目前源码中的rpc官方已经宣布不再添加新功能,并推荐使用grpc. 作为go标准库中rpc框架,还是有很多地方值得借鉴及学习,这里将从源码角度分析go原生rpc框架,以及分享一些在使用过程中遇到的坑. 2.server端 server端主要分为两个步骤,首先进行方法注册 总结 总的来说,go原生rpc算是个基础版本的rpc,代码精简,可扩展性高,但是只是实现了rpc最基本的网络通讯,像超时熔断,链接管理(保活与重连),服务注册发现,还是欠缺的,因此还是达不到生产环境开箱即用 ,不过git就有一个基于rpc的功能增强版本,叫rpcx,支持了大部分主流rpc的特性. 6. 参考 rpc https://golang.org/pkg/net/rpc/ 版权申明:内容来源网络(彬哥整理),版权归原创者所有。

    1.1K40发布于 2018-07-26
  • 来自专栏Vincent-yuan

    RabbitMQ学习之RPC(6)

    这种模式通常被叫做Remote Procedure Call 或者RPC. 在这个教程中,我们将使用RabbitMQ来建立一个RPC系统:a client和a scalable RPC server. 它会暴露一个发送RPC请求的名叫Call的方法并且会阻塞到接收到answer. 我们的RPC像图中这样工作: 当一个client启动时,它创建一个匿名的专用的callback queue. 对于一个RPC request,client将会发送带有两个属性的message。 Request会被发送到rpc_queue. RPC worker(这里就是server)将会等待接收rpc_queue队列里的requests。

    68020发布于 2019-09-10
  • 来自专栏小脑斧科技博客

    RPC 原理以及开源 RPC 协议 thrift 源码解析

    6. thrift 简介 thrift 是 apahce 公司设计和维护的一套非常流行的开源 RPC 框架。 可以参看官方文档: http://thrift.apache.org/ 主页君下一篇文章将详细介绍了 thrift 的基本使用 本文,我们结合相关的源码,介绍一下 thrift 的工作原理。 DemoService.py 源码分析 # # Autogenerated by Thrift Compiler (0.9.1) # # DO NOT EDIT UNLESS YOU ARE SURE 编码为二进制编码格式数据进行传输 TCompactProtocol — 编码为高效率的、密集的二进制编码格式进行数据传输 TJSONProtocol — 编码为 Json 数据编码协议进行传输 他们的 python 实现源码可以参看 等非固定长度的类型则定义了 readXXXBegin、readXXXEnd 与 writeXXXBegin、writeXXXEnd 系列方法用来在整个结构读写开始和完成的时候进行一些必要的工作,但正如我们上面在源码中看到的

    1.4K21编辑于 2022-06-27
  • 来自专栏服务端技术杂谈

    dubbo源码学习笔记----RPC

    RpcContext 整个RpcContext通过ThreadLocal维持。 public class RpcContext { private static final ThreadLocal<RpcContext> LOCAL = new ThreadLocal<RpcContext>() { @Override protected RpcContext initialValue() { return new RpcContext();

    75760发布于 2018-04-17
  • 来自专栏技巅

    Glusterfs之rpc模块源码分析(上)之RPC概述

    RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 6.执行的过程将结果返回服务器句柄 7.服务器句柄返回结果,调用远程系统内核 8.消息传回本地主机 9.客户句柄由内核接收消息 10.客户接收句柄返回的数据 第四节、RPC OVER  HTTP Microsoft RPC-over-HTTP 部署(RPC over HTTP)允许RPC 客户端安全和有效地通过Internet 连接到RPC 服务器程序并执行远程过程调用。 这是在一个名称为RPC-over-HTTP 代理,或简称为RPC 代理的中间件的帮助下完成的。 RPC 代理运行在IIS 计算机上。 通过RPC over HTTP,RPC 客户端不和服务器直接通信,它们使用RPC 代理作为中间件。

    1K70发布于 2018-05-25
  • 来自专栏大数据技术与应用实战

    hadoop源码解析之RPC分析

    所以首先学习了一下hadoop rpc的内部实现,拜读了一下hadoop的源码 准备工作 首先下载hadoop的最新稳定版源码(目前是2.7.3),编译hadoop源码,因为hadoop的底层序列号用的是 如果比较懒的话,其实用maven把相关jar和源码包下载下来也行。 Hadoop的rpc并没有采用现成的rpc框架,如thrift等,而是采用jdk自带的库完全自己写了一套,更加轻量级,更加可控。 用到的主要的技术是java NIO、网络编程、反射和动态代理,如果对这几块不太熟悉的话,建议先找些资料看看相关的东西 #Hadoop rpc实现流程 Hadoop rpc框架位于hadoop源码的hadoop-commn 项目里,就像我们学习任何语言先学习hello world一样,我们先来一个最简单的程序,这个程序是从hadoop源码test目录里找到的,testRPC.java,我们运行其中的main方法。 客户端与服务器通信的一些信息在这个里面 Handler 用于处理接受到rpc请求 Listener 用于监听rpc请求。

    39021发布于 2020-09-15
  • 来自专栏开源心路

    Hadoop-Yarn源码-RPC基础

    RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式程序在内的应用程序更加轻易。 (Hadoop 2.6版本) 二.RPC通信模型 RPC通常采用客户机/服务器模型。 五.Hadoop RPC使用方法 Hadoop RPC对外主要提供两种接口(org.apache.hadoop.ipc.RPC),分别是: //构造一个客户端代理对象(实现某个协议),用于向服务器发送RPC 静态类,构造RPC Server 5.1 定义RPC协议 RPC协议是客户端和服务端之间通信接口,它定义了服务器端对外提供的服务器接口。 (ADDRESS, 99999), conf); int result = proxy.add(5, 6); String test = proxy.echo("test")

    41820编辑于 2023-06-30
  • 来自专栏FoamValue

    guide-rpc-framework 源码学习

    我:朋友圈有个程序猿花了2个月的头发写了一个 RPC 框架示例(代码地址:https://github.com/Snailclimb/guide-rpc-framework),刚刚下载到本地看着看着就【 ---- 项目模块 guide-rpc-framwork 是基于 Netty、Kyro、Zookeeper 实现的 RPC 框架。 rpc-framework-simple RPC 框架核心实现类 项目模块是非常简练的,如果换成是我这种强迫症患者来分的话,还是会增加一个 rpc-framework-parent 模块(虽然 rpc-framework-parent ---- RPC 核心框架 RPC-FRAMEWORK-COMMON 简洁干练的 common 工程,约定了 RPC 错误信息、响应错误码枚举,RPC、序列化的自定义错误,单例工厂类,线程池、zookeeper RPC-FRAMEWORK-SERVICE RPC 框架的核心实现类。保存服务端注册的实例,并提供动态代理的方式用于客户端发送请求(socket、netty 方式)到服务端。

    1.2K20发布于 2020-08-31
  • 来自专栏Super 前端

    Web Workers RPC:Comlink 源码解析

    上篇文章,有提及 Web Workers RPC 以解决浏览器不阻塞UI的问题,其中 comlink 是一把利器,本文就 comlink 的关键源码进行解析。 Comlink 通过提供 RPC 实现将基于 Worker.postMessage(someObject) 的 API 变成了对开发人员更友好的“类似本地调用”方式。 拆解源码之前,先介绍几个重要的概念:Proxy、Channel Messaging API、Transferable objects 注意:worker 创建完成后,每次通信都是新建 MessageChannel 源码解析 通过 Proxy 对 wrap(worker) 劫持相关操作; 通过 ep(worker/MessageChannel)进行 on message 以及 postMessage 操作;

    1K40编辑于 2022-11-02
  • 来自专栏流计算

    Flink源码分析之RPC通信

    问题导读RPC服务端创建过程RPC客户端创建过程RPC调用流程在Flink集群中整个RPC通信网络是如何一步步建立起来的,连接容错又如何保证简介Flink基于Akka来实现内部各组件(ResourceManager 本篇着重分析Flink的RPC设计,如何封装Actor模型,RPC的创建和调用流程。阅读说明:源码版本:Flink release-1.14.4阅读前提:了解Akka Actor基础知识1). RpcService 提供了启动Rpc服务(startServer)、停止Rpc服务(stopServer)、连接远端Rpc服务等方法。 RpcServer 是Rpc服务端自身的代理对象,设计上是供服务端调用自身非Rpc方法。类关系图注:这里借用网上画的一张图图片问题1. RPC服务端创建过程RPC服务端是一个代理对象。 的Rpc地址信息 WebMonitorEndpoint是一个基于netty实现的rest服务,非Rpc服务端4).

    1.9K133编辑于 2022-07-12
  • 来自专栏山行AI

    dubbo源码rpc协议介绍

    2.2 dubbo=com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol 是dubbo默认的protocol,主要用于创建ExchangeServer和 2.3 rmi=com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol ? 使用的是java的rmi机制进行直连通信。 和hessian序列化不是一个意思 2.5 com.alibaba.dubbo.rpc.protocol.http.HttpProtocol server端实现的是HttpServer,主要的实现有 :webservice协议的实现 thrift=com.alibaba.dubbo.rpc.protocol.thrift.ThriftProtocol:thrift协议 memcached=com.alibaba.dubbo.rpc.protocol.memcached.MemcachedProtocol :memcached协议 redis=com.alibaba.dubbo.rpc.protocol.redis.RedisProtocol:redis协议 rest=com.alibaba.dubbo.rpc.protocol.rest.RestProtocol

    1.1K20发布于 2019-07-12
  • 来自专栏C++开源框架源码分析

    muduo源码分析(二)-Protobuf RPC流程

    展示如何在muduo网络库基础上结合protobuf rpc实现一个完整的rpc框架。 muduo-rpc-注册函数.jpg 红色箭头描述了注册函数流程: 红色1-3说明阅读源码时候类的顺序,即从RpcServer的构造函数开始阅读,然后是TcpServer、Acceptor、Channel 在Acceptor的handleRead方法实现 红色5说明Acceptor中注册的回调函数setNewConnectionCallback在TcpServer中的newConnection实现 红色6说明 TcpServer的start开始,start中调用了EventLoop的runInLoop方法 蓝色2:runInLoop中执行Acceptor的listen方法,实现socket的listen操作 蓝色3-6源码,只有一个感觉,没有什么事儿是回调函数不能解决的,如果一层不行,那就再加一层。

    3.1K01发布于 2019-03-09
  • 来自专栏进阶高级前端工程师

    React源码分析6-hooks源码6

    本文将讲解 hooks 的执行过程以及常用的 hooks 的源码。 总结所以我们总结一下 renderWithHooks 这个函数,它所做的事情如下: 图片hooks 源码前面 hooks 的执行入口我们都找到了,现在我们看一下常用的一些 hooks 源码。 updateReducer 的源码如下:function updateReducer<S, I, A>( reducer: (S, A) => S, initialArg: I, init? useCallback & useMemouseCallback 和 useMemo 也是一样,源码结构上十分相似,所以也放在一起来讲。 其他 hook 平时用的比较少,就不在这里展开讲了,但通过上面几个 hook 的源码讲解,其他 hook 看源码你应该也能看得懂。

    80250编辑于 2023-01-10
  • 来自专栏Netty应用与源码

    Netty基础—6.Netty实现RPC服务

    大纲1.RPC的相关概念2.RPC服务调用端动态代理实现3.Netty客户端之RPC远程调用过程分析4.RPC网络通信中的编码解码器5.Netty服务端之RPC服务提供端的处理6.RPC服务调用端实现超时功能 1.RPC的相关概念(1)什么是RPC(2)什么是静态代理(3)什么是动态代理(4)动态代理总结(1)什么是RPC本地只有一个方法的接口,需要在本地对这个方法进行远程调用,而对这个方法进行调用其实就是对该接口的动态代理进行调用 网络通信中的编码解码器(1)RPC的请求响应通信协议(2)使用Hessian进行序列化与反序列化(3)RPC的编码器(4)RPC的解码器(5)如何解决粘包拆包问题(1)RPC的请求响应通信协议//RPC //所以只要返回不处理并且复位读索引,那么下次for循环到来又可重新处理该Channel的读事件了; return; } //6. response to client: " + rpcResponse); }}6.RPC服务调用端实现超时功能public class ReferenceConfig { private

    27501编辑于 2025-05-21
  • 来自专栏技巅

    Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(2)

    第二节、rpc客户端实现原理及代码分析 rpc客户端主要发起一个rpc请求,执行完rpc请求以后就退出rpc,下面分析客户端rpc请求建立的整个过程。  (rpc, cli_rpc_notify, this);//注册rpc请求通知函数         rpc_clnt_start (rpc);//开始rpc 这段代码其实是glusterfs客户端程序启动时建立 rpc请求的初始化过程函数,真正独立开始建立一个rpc请求的过程是从函数rpc_clnt_new开始的,下面就分析这个函数的功能,先看主要代码:         rpc = GF_CALLOC (1 ;         ret = rpc_clnt_connection_init (rpc, ctx, options, name);//初始化rpc请求连接         rpc = rpc_clnt_ref 请求过程完全建立,当真正的发送一个rpc请求的时候就会响应相应的epoll的写事件,把包装好的数据帧发送到rpc服务器端,rpc客户端也会通过可读事件来接收rpc服务器端的响应信息。

    93450发布于 2018-05-25
  • 来自专栏技巅

    Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(3)

    第三节、rpc通信过程分析 前面两个小节分别对rpc服务端和客户端的建立流程做了详细的分析,也就是说rpc客户端和服务器端已经能够进行正常的通信了(rpc客户端已经通过connect链接上rpc 提交客户端的rpc请求。  (rpc);//新建一个rpc调用的id号         conn = &rpc->conn;//从rpc对象中取得链接对象         rpcreq->prog = prog;//赋值  (req);//根据请求对象取得rpc过程调用对象         if (actor && (req->rpc_err == SUCCESS)) {//rpc过程调用对象不为null并且请求信息是成功的 这样一次完整的rpc通信就完成了。

    1.4K40发布于 2018-05-25
  • 来自专栏CDN_New

    thrift RPC 修改源码支持获取client ip

    e.printStackTrace(); } transport.close(); } 修改 从maven下载了thrift-0.9.3版本的源码 上述更改需要首先系在thrift源码包: libthrift-0.9.3-sources.jar。修改代码后再本地编译生成jar包,在使用工程导入即可。

    2.3K110发布于 2019-06-18
  • 来自专栏C++开源框架源码分析

    ananas RPC源码分析-net库概览(一)

    ananas是一个基于promise模式和google protobuf的RPC框架,目前由C++11实现,是出于教学目的写的小巧框架。 受作者所托,这两天大概浏览了net部分代码,做个简单总结。 相比Tars RPC代码,ananas更适合初学者学习网络库 1 网络库框架 [网络库框架] 网络库的整体框架非常简洁,如上图所示: 左上角的EventLoop活在主线程中,负责listen、bind, 5号,循环等待epoll_wait返回,这里代码用了一个预定义宏TEMP_FAILURE_RETRY,这是GUN library提供的一个便捷的方法,用于检查函数返回值,如果返回-1,就一直检查下去 6号 HandleReadEvent方法 7号-8号,当链接成功建立时候,会把链接分配到EventLoopGroup中的一个EventLoop中进行注册 9号 OnNewConnection是回调函数,由用户自己定义,例子可以参考源码 如果我们想在网络库之上制作自己的RPC框架,只需要在外层编写OnNewConnection函数,通过Application类中的Listen方法进行注册即可 3 网络库怎样接收请求和处理结果 [ana-Connection

    1.2K10发布于 2019-02-15
  • 来自专栏爬蜥的学习之旅

    rpc之thrift入门与TBinaryProtocol源码追踪

    thrift是一个支持多语言进行RPC的软件库,开发者通过定义数据类型和服务接口,经由thrift的代码生成引擎就可以构建RPC客户端和服务端所需要的代码。它的核心组件如下: Types。 服务端收到RPC后的处理逻辑,负责将读到的内容交由server处理,并将结果写回输出流 Type 支持的基本类型为 bool 取值为true/false byte 有符号的1个字节 组织组件完成功能 TServer server=new TSimpleServer(serverArgs); LOG.info("main server start ... "); //6: 等待连接到来 server.serve(); 可运行的客户端和服务端案例请戳这里 TBinaryProtocol源码追踪 服务端启动后,等待连接的到来 @Trace( index );") .interpretation("开始往返回Stream中写入数据,表明这是对那个方法的返回值,然后写入返回的结果,最后输入socket"); TBinaryProtocol源码总结

    86430发布于 2019-08-20
  • 来自专栏技巅

    Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)

    二、Glusterfs的rpc模块实现 第一节、rpc服务器端实现原理及代码分析 1.rpc服务初始化 Rpc服务的初始化工作在函数rpcsvc_init中实现的,实现代码如下: 服务 return svc;//返回初始化后的所有rpc服务的全局描述对象 } 初始化的工作主要就是为描述一个所有rpc服务的全局对象设置一些初始化的值,这些信息一直保存到整个rpc服务结束 先看看rpc_transport_load函数的主要实现代码: trans = GF_CALLOC (1, sizeof (struct rpc_transport), gf_common_mt_rpc_trans_t 到此为止整个rpc服务基本上已经建立完成,开始提供rpc服务,不过具体提供哪些程序的服务还需要最后一步,就是在已经建立的rpc服务上注册服务程序(就是提供客户端调用的程序集,每一个程序里面提供多个函数) 一个完整的rpc服务就这样完全建立了。 总结:可以看出整个rpc服务的建立过程还是比较复杂的,下面用一个完整的图来解析整个rpc的建立过程,图如下:

    1.5K30发布于 2018-05-25
领券