本文实例讲述了golang两种调用rpc的方法。分享给大家供大家参考,具体如下:
golang的rpc有两种方法进行调用,一种是rpc例子中给的:
复制代码 代码如下:package main
import (
"net/rpc"
"net/http"
"log"
"net"
"time"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *([]string)) error {
*reply = append(*reply, "test")
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil {
log.Fatal("listen error:", e)
}
go http.Serve(l, nil)
time.Sleep(5 * time.Second)
client, err := rpc.DialHTTP("tcp", "127.0.0.1" + ":1234")
if err != nil {
log.Fatal("dialing:", err)
}
args := &Args{7,8}
reply := make([]string, 10)
err = client.Call("Arith.Multiply", args, &reply)
if err != nil {
log.Fatal("arith error:", err)
}
log.Println(reply)
}
另一种是使用NewServer
这种是当rpc已经注册的时候就要使用了另外一种了。即一个server只能在DefaultRPC中注册一种类型。
当Server使用rpc.NewServer的时候,client也需要进行下改动了
复制代码 代码如下:package main
import (
"net/rpc"
//"net/http"
"log"
"net"
"time"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *([]string)) error {
*reply = append(*reply, "test")
return nil
}
func main() {
newServer := rpc.NewServer()
newServer.Register(new(Arith))
l, e := net.Listen("tcp", "127.0.0.1:1234") // any available address
if e != nil {
log.Fatalf("net.Listen tcp :0: %v", e)
}
go newServer.Accept(l)
newServer.HandleHTTP("/foo", "/bar")
time.Sleep(2 * time.Second)
address, err := net.ResolveTCPAddr("tcp", "127.0.0.1:1234")
if err != nil {
panic(err)
}
conn, _ := net.DialTCP("tcp", nil, address)
defer conn.Close()
client := rpc.NewClient(conn)
defer client.Close()
args := &Args{7,8}
reply := make([]string, 10)
err = client.Call("Arith.Multiply", args, &reply)
if err != nil {
log.Fatal("arith error:", err)
}
log.Println(reply)
}
第二个例子中的
复制代码 代码如下:newServer.HandleHTTP("/foo", "/bar")
可以任意设置,第一个例子其实是设置了默认的两个
这里也顺便将reply作为[]slice的例子给演示了下
希望本文所述对大家Go语言程序设计有所帮助。
golang,调用rpc
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 【发烧天碟】汤姆·罗素《上帝使者》1999[FLAC+CUE]
- 齐秦.2024-虛度(EP)【力行】【FLAC分轨】
- 高明瀚.1991-我认真,因为我要去看世界【滚石】【WAV+CUE】
- 谢宜君.2021-北海道之恋【豪记】【WAV+CUE】
- 龙飘飘唱片《龙飘飘畅销精选辑》[WAV+ CUE][531M]
- 黄小琥《单曲合集44首》[FLAC][1.2G]
- 黄婉婷《达坂城姑娘 DSD》[WAV+CUE][472M]
- 萤火突击怎么卡无人局 匹配人数设置方法
- 萤火突击怎么邀请好友组队 好友组队方法介绍
- 萤火突击怎么快速升级仓库 仓库升级方法介绍
- 【发烧唱片】《马兰士顶级音响测试唱片》[FLAC+CUE]
- 【轻音乐】曼托凡尼乐团《作品精选辑》2006[FLAC+CUE]
- 俞丽拿沈榕-梁祝(珍藏版)小提琴协奏曲《梁山伯与祝英台》创作50周年纪念[2CD]》[WAV+CUE]
- 开心少女组.1986-开心油戏(2016环球经典礼赞版)【环球】【WAV+CUE】
- 苏慧伦.2007-左撇子旋转门【环球】【WAV+CUE】