golang基础之RPC的客户端和服务端
简介
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的客户端和服务端相关推荐
- java基础—网络编程——TCP客户端与服务端交互
import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import ja ...
- RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例
1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...
- 黑帽子Python——基础的网络编程工具——TCP的客户端和服务端
学习自Python黑帽子(第二版) TCP的客户端和服务端 前言 TCP客户端 TCP服务端 问题 后记 前言 直接通过实践学习编程,很容易产生一些细节方面的知识错误,遇到不会的俺就问ChatGPT
- gRPC中Java和node进行异构通信-互为客户端和服务端
场景 gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...
- 浅议C#客户端和服务端通信的几种方法:Rest和GRPC和其他
本文来自:https://michaelscodingspot.com/rest-vs-grpc-for-asp-net/ 浅议C#客户端和服务端通信的几种方法:Rest和GRPC 在C#客户端和C# ...
- oracle 客户端_【数据库 常见术语1】 客户端,服务端
这个系列会介绍并回顾在学习和工作中常碰到的一些名词,以及它们的意思. 客户端,服务端(以Oracle数据库为例) ******************************************* ...
- 13.Axis创建webservice客户端和服务端
转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...
- QT -- TcpSocket实例,使用Qt中的tcp通信协议,构建客户端和服务端,实现局域网通信软件功能
Qt中使用Tcp构建通信客户端实现聊天信息发送连接等 1.简介 2.项目创建和界面构建 1)流程图 2)项目构建 3)界面构建 3.代码设计 1)项目pro添加 2)客户端设计 a. clientwi ...
- 分布式系统中的幂等性(客户端与服务端的交易一致性,避免多次扣款)
原文Zookeeper与Dubbo | 什么是分布式系统中的幂等性 结合支付防重设计一起看 ZooKeeper是一种分布式协调服务,他用简单的架构和API,解决了在分布式环境中协调和管理服务的难题. ...
最新文章
- python -os、sys
- VTK:绘图之ScatterPlot
- 操作系统:第三章 内存管理2 - 详解虚拟内存,页面置换算法,页面分配策略
- Oracle Schema Objects——Tables——TableType
- 627.Swap Salary-(LeetCode之Database篇)
- [html]html实现页面跳转都有哪些方法?
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 18丨即时食物配送 II【难度中等】​
- python中符号输入_Python基础(输入、运算符)
- vue tree组件_使用Vue 3.0做JSX(TSX)风格的组件开发
- Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
- Qt学习之路(60): 创建shared library
- 使用QT的qmake工具生成VS工程
- 写给想做自动化的我和我们
- mysql常用sql命令
- linux windows网络工程师,2020年软考中级网络工程师考点:Linux系统
- “您未被授权查看该页,您不具备使用所提供的凭据查看该目录或页的权限” -- 解决办法
- matlab spline三次样条插值x,Spline(三次样条插值)
- 保留三位有效数字,四舍六入五成双
- scara 机器人三四轴机械结构
- 该不该造自己的轮子?