当前位置:网站首页>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)
}
边栏推荐
- Semi-Decentralized Federated Learning for Cooperative D2D Local Model Aggregation
- Talking about data security governance and privacy computing
- 人人都在说的数据中台,你需要关注的核心特点是什么?
- tree table lookup
- Likou - preorder traversal, inorder traversal, postorder traversal of binary tree
- private package
- Gantt chart is here, project management artifact, template is used directly
- How Jin Cang database correctness verification platform installation file
- word column notes
- 【 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
猜你喜欢

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

Data to enhance Mixup principle and code reading

剑指offer专项突击版第20天

沃谈小知识 |“远程透传”那点事儿

链表的简单描述及代码的简单实现

tree table lookup

View handler stepping record

Matlab画图3

通过模拟Vite一起深入其工作原理

Data storage practice based on left-order traversal
随机推荐
How Jin Cang database correctness verification platform installation file
Cybersecurity and the Metaverse: Identifying Weak Links
How to sort multiple fields and multiple values in sql statement
Open Source License Description LGPL
1484. 按日期分组销售产品
Images using redis cache Linux master-slave synchronization server hard drive full of moved to the new directory which points to be modified
627. 变更性别
1527. 患某种疾病的患者
Introduction to SDC
Matlab drawing 3
PostgreSQL数据库 用navicat 打开表结构的时候报错 cannot update secondarysnapshot during a parallel operation 怎么解决?
[Storage] Dawning Storage DS800-G35 ISCSI maps each LUN to the server
Use SuperMap iDesktopX data migration tool to migrate ArcGIS data
解决端口占用问题 Port xxxx was already in use
QStyle平台风格
QT:神奇QVarient
UOS系统下ksql应用缺少动态库”libtinfo.so.5“问题
Physical backup issues caused by soft links
[C language] Detailed explanation of stacks and queues (define, destroy, and data operations)
2022-08-04: Input: deduplicated array arr, the numbers in it only contain 0~9.limit, a number.Return: The maximum number that can be spelled out with arr if the requirement is smaller than limit.from