简介

RPC: 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。

用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。打个比方,我用go语言写了个获取用户信息的方法getUserInfo,并把go程序部署在阿里云服务器上面,现在我有一个部署在腾讯云上面的php项目,需要调用golang的getUserInfo方法获取用户信息,php跨机器调用go方法的过程就是RPC调用。

代码

server.go

package mainimport ("fmt""net""net/http""net/rpc""time"
)type Server struct {}type Req struct {NumOne intNumTwo int
}type Res struct {Num int
}func (s *Server) Add(req Req,res *Res) error  {time.Sleep(5*time.Second)res.Num = req.NumOne + req.NumTworeturn nil
}func main() {rpc.Register(new(Server))rpc.HandleHTTP()l,e := net.Listen("tcp",":8888")if e != nil {fmt.Println("错了")}http.Serve(l,nil)
}

client.go

package mainimport ("fmt""log""net/rpc""time"
)type Req struct {NumOne intNumTwo int
}type Res struct {Num int
}func main() {req := Req{NumOne: 1,NumTwo: 2}var res Resclient, err := rpc.DialHTTP("tcp","localhost:8888")if err != nil {log.Fatal("dialing:",err)}//client调用call是同步,调用Go是异步//一、call调用//client.Call("Server.Add",req,&res)//fmt.Println(res)//二、Go调用ca := client.Go("Server.Add", req, &res, nil)//以下是等待的过程中做的事情//方式一for  {select {case <-ca.Done:fmt.Println(res)returndefault:time.Sleep(time.Second)fmt.Println("我等着")}}//方式二//fmt.Println("我可以做好多事情!")//<-ca.Done//fmt.Println(res)
}


学习链接一

学习链接二

golang基础之RPC的客户端和服务端相关推荐

  1. java基础—网络编程——TCP客户端与服务端交互

    import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import ja ...

  2. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  3. 黑帽子Python——基础的网络编程工具——TCP的客户端和服务端

    学习自Python黑帽子(第二版) TCP的客户端和服务端 前言 TCP客户端 TCP服务端 问题 后记 前言 直接通过实践学习编程,很容易产生一些细节方面的知识错误,遇到不会的俺就问ChatGPT

  4. gRPC中Java和node进行异构通信-互为客户端和服务端

    场景 gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

  5. 浅议C#客户端和服务端通信的几种方法:Rest和GRPC和其他

    本文来自:https://michaelscodingspot.com/rest-vs-grpc-for-asp-net/ 浅议C#客户端和服务端通信的几种方法:Rest和GRPC 在C#客户端和C# ...

  6. oracle 客户端_【数据库 常见术语1】 客户端,服务端

    这个系列会介绍并回顾在学习和工作中常碰到的一些名词,以及它们的意思. 客户端,服务端(以Oracle数据库为例) ******************************************* ...

  7. 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...

  8. QT -- TcpSocket实例,使用Qt中的tcp通信协议,构建客户端和服务端,实现局域网通信软件功能

    Qt中使用Tcp构建通信客户端实现聊天信息发送连接等 1.简介 2.项目创建和界面构建 1)流程图 2)项目构建 3)界面构建 3.代码设计 1)项目pro添加 2)客户端设计 a. clientwi ...

  9. 分布式系统中的幂等性(客户端与服务端的交易一致性,避免多次扣款)

    原文Zookeeper与Dubbo | 什么是分布式系统中的幂等性 结合支付防重设计一起看 ZooKeeper是一种分布式协调服务,他用简单的架构和API,解决了在分布式环境中协调和管理服务的难题. ...

最新文章

  1. python -os、sys
  2. VTK:绘图之ScatterPlot
  3. 操作系统:第三章 内存管理2 - 详解虚拟内存,页面置换算法,页面分配策略
  4. Oracle Schema Objects——Tables——TableType
  5. 627.Swap Salary-(LeetCode之Database篇)
  6. [html]html实现页面跳转都有哪些方法?
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 18丨即时食物配送 II【难度中等】​
  8. python中符号输入_Python基础(输入、运算符)
  9. vue tree组件_使用Vue 3.0做JSX(TSX)风格的组件开发
  10. Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
  11. Qt学习之路(60): 创建shared library
  12. 使用QT的qmake工具生成VS工程
  13. 写给想做自动化的我和我们
  14. mysql常用sql命令
  15. linux windows网络工程师,2020年软考中级网络工程师考点:Linux系统
  16. “您未被授权查看该页,您不具备使用所提供的凭据查看该目录或页的权限” -- 解决办法
  17. matlab spline三次样条插值x,Spline(三次样条插值)
  18. 保留三位有效数字,四舍六入五成双
  19. scara 机器人三四轴机械结构
  20. 该不该造自己的轮子?

热门文章

  1. 判断对象是否是空对象
  2. 公司名称变更后原因的名字能马上使用吗?企业名称变更所需材料
  3. 『程序员』 [业内动态]谈谈软件从业学习方向
  4. Android的七巧板Activity之二 Activity的加载模式
  5. android图片素材文件格式,Android Studio神器之Image Asset
  6. 2019年二月刷题列表
  7. 最小字典序列--选靓号
  8. 20个免费的PowerPoint模板来丰富您的演示文稿
  9. umijs 框架加载mp4视频背景
  10. dom4j-通过遍历rootElement获取指定节点并修改