当前位置:网站首页>rpc-remote procedure call demo
rpc-remote procedure call demo
2022-08-05 02:57:00 【ALEX_CYL】
RPC:Remote Procedure Call
rpc对函数的要求:
1.字母大写,即要求是public
2.含有两个可导出类型的参数,返回给客户端的参数必须是指针类型
3.函数必须有一个返回值 error
server demo:
package main
import (
"errors"
"fmt"
"net/http"
"net/rpc"
)
type Args struct {
A, B int
}
type Query struct {
X, Y int
}
type Last int
func (t *Last) Multiply(args Args, reply *int) error {
*reply = args.A * args.B
fmt.Println(*reply, "Multiply exec")
if *reply == 0 {
return fmt.Errorf("%v中存在零值", args)
}
return nil
}
func (t *Last) Divide(args Args, query *Query) error {
if args.B == 0 {
return errors.New("分子args.B = 0")
}
query.X = args.A / args.B
query.Y = args.A % args.B
fmt.Println(*query, "Divide exec")
return nil
}
func main() {
La := new(Last)
fmt.Println("la", La)
// 类型注册
// Register在DefaultServer中发布接接收类型的方法。
rpc.Register(La)
// HandleHTTP在DefaultRPCPath上为RPC消息向DefaultServer注册了一个HTTP处理器,
// 在DefaultDebugPath上注册了一个调试处理器。
// 仍然需要调用http.Serve()
rpc.HandleHTTP() //设定http类型
err := http.ListenAndServe("127.0.0.1:8080", nil)
defer func() {
err := recover()
if err != nil {
fmt.Println("panic() happend,err:", err)
}
}()
if err != nil {
panic(err)
}
}
client demo:
package main
import (
"fmt"
"net/rpc"
)
type Args struct {
A, B int
}
type Query struct {
X, Y int
}
func main() {
serverIp := "127.0.0.1:8080"
client, err := rpc.DialHTTP("tcp", serverIp)
if err != nil {
fmt.Println(err)
}
i1 := 12
i2 := 13
args := Args{
i1, i2}
var reply int
err = client.Call("Last.Multiply", &args, &reply)
if err != nil {
fmt.Println(err)
}
fmt.Println(args.A, "*", args.B, "=", reply)
var query Query
err = client.Call("Last.Divide", args, &query)
if err != nil {
fmt.Println(err)
}
fmt.Println(args.A, "/", args.B, "=", query.X)
fmt.Println(args.A, "%", args.B, "=", query.Y)
}
边栏推荐
- 剑指Offer--找出数组中重复的数字(三种解法)
- undo问题
- OpenGL 工作原理
- leetcode 15
- 【 2 】 OpenCV image processing: basic knowledge of OpenCV
- Distributed systems revisited: there will never be a perfect consistency scheme...
- Data to enhance Mixup principle and code reading
- DAY22: sqli-labs shooting range clearance wp (Less01~~Less20)
- 人人都在说的数据中台,你需要关注的核心特点是什么?
- Chinese characters to Pinyin
猜你喜欢
随机推荐
Industry case | insurance companies of the world's top 500 construction standards can be used to drive the business analysis system
正则表达式,匹配中间的某一段字符串
shell statement to modify txt file or sh file
剑指offer专项突击版第20天
Matlab drawing 3
Study Notes-----Left-biased Tree
VSCode Change Default Terminal 如何修改vscode的默认terminal
post-study program
word分栏小记
The linear table lookup
Programmer's Tanabata Romantic Moment
[机缘参悟-60]:《兵者,诡道也》-2-孙子兵法解读
Gantt chart is here, project management artifact, template is used directly
627. 变更性别
[In-depth study of 4G/5G/6G topic-51]: URLLC-16-"3GPP URLLC related protocols, specifications, and technical principles in-depth interpretation"-11-High reliability technology-2-Link adaptive enhancem
Talking about data security governance and privacy computing
mysql没法Execute 大拿们求解
627. Change of gender
QStyle平台风格
Use SuperMap iDesktopX data migration tool to migrate map documents and symbols