当前位置:网站首页>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)
}
边栏推荐
猜你喜欢
通过模拟Vite一起深入其工作原理
沃谈小知识 |“远程透传”那点事儿
Gantt chart is here, project management artifact, template is used directly
Access Characteristics of Constructor under Inheritance Relationship
链表的简单描述及代码的简单实现
dmp (dump) dump file
How Jin Cang database correctness verification platform installation file
【 2 】 OpenCV image processing: basic knowledge of OpenCV
Study Notes-----Left-biased Tree
Multithreading (2)
随机推荐
Use SuperMap iDesktopX data migration tool to migrate map documents and symbols
虚拟内存原理与技术
Compressed storage of special matrices
Flink 1.15.1 Cluster Construction (StandaloneSession)
How to solve the error cannot update secondary snapshot during a parallel operation when the PostgreSQL database uses navicat to open the table structure?
Multithreading (2)
Error: Not a signal or slot declaration
通过模拟Vite一起深入其工作原理
1667. 修复表中的名字
The Tanabata copywriting you want has been sorted out for you!
word column notes
Ant Sword Advanced Module Development
Open Source License Description LGPL
Data to enhance Mixup principle and code reading
人人都在说的数据中台,你需要关注的核心特点是什么?
OpenGL 工作原理
数学-求和符号的性质
Study Notes-----Left-biased Tree
数据增强Mixup原理与代码解读
Programmer's Tanabata Romantic Moment