当前位置:网站首页>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)
}
边栏推荐
- Open Source License Description LGPL
- sql server installation prompts that the username does not exist
- Beidou no. 3 short message terminal high slope in open-pit mine monitoring programme
- Countdown to 2 days|Cloud native Meetup Guangzhou Station, waiting for you!
- The linear table lookup
- dmp(dump)转储文件
- mysql没法Execute 大拿们求解
- Tencent Cloud [Hiflow] New Era Automation Tool
- Hash table lookup (hash table)
- 剑指Offer--找出数组中重复的数字(三种解法)
猜你喜欢

Beidou no. 3 short message terminal high slope in open-pit mine monitoring programme

Compressed storage of special matrices

View handler stepping record

2022-08-04:输入:去重数组arr,里面的数只包含0~9。limit,一个数字。 返回:要求比limit小的情况下,能够用arr拼出来的最大数字。 来自字节。

线上MySQL的自增id用尽怎么办?

腾讯云【Hiflow】新时代自动化工具

nodeJs--encapsulate routing

lua learning

【 genius_platform software platform development 】 : seventy-six vs the preprocessor definitions written cow force!!!!!!!!!!(in the other groups conding personnel told so cow force configuration to can

J9 Digital Currency: What is the creator economy of web3?
随机推荐
Use @Mapper to query the partition status of oracle and report an error
Pisanix v0.2.0 released | Added support for dynamic read-write separation
QStyle平台风格
[C language] Detailed explanation of stacks and queues (define, destroy, and data operations)
金仓数据库如何验证安装文件平台正确性
Matlab画图3
开源协议说明LGPL
The problem of lack of dynamic library "libtinfo.so.5" in ksql application under UOS system
Syntax basics (variables, input and output, expressions and sequential statements)
Physical backup issues caused by soft links
【软件测试】自动化测试之unittest框架
Apache DolphinScheduler, a new generation of distributed workflow task scheduling platform in practice - Medium
使用二维码传输文件的小工具 - QFileTrans 1.2.0.1
sql server installation prompts that the username does not exist
word column notes
Error: Not a signal or slot declaration
undo problem
软链接引发的物理备份问题
C student management system Find student nodes based on student ID
sql server 安装提示用户名不存在