分享
golang rpc
webyh · · 3633 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
rpc server端(golang版本):
package main
import (
"errors"
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
const (
URL = "127.0.0.1:5001"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Add(args []Args, reply *int) error {
for i := 0; i < len(args); i++ {
*reply += args[i].A
*reply += args[i].B
}
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
tcpAddr, err := net.ResolveTCPAddr("tcp", URL)
if err != nil {
fmt.Println(err)
}
listener, err := net.ListenTCP("tcp", tcpAddr)
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go jsonrpc.ServeConn(conn)
}
}
rpc client端(golang版本)
package main
import (
"fmt"
_ "net/rpc"
"net/rpc/jsonrpc"
"time"
)
type Args struct {
A, B int
}
const (
URL = "127.0.0.1:5001"
)
func main() {
client, err := jsonrpc.Dial("tcp", URL)
defer client.Close()
if err != nil {
fmt.Println(err)
}
var args [100000]Args //批量参数
for i := 0; i < len(args); i++ {
args[i].A = i
args[i].B = i
}
//fmt.Printf("args %v \n", args)
harvester_time1 := time.Now().UnixNano()
var reply int
err = client.Call("Arith.Add", args, &reply) //批量执行
if err != nil {
fmt.Println(err)
}
harvester_time2 := time.Now().UnixNano()
fmt.Printf("cal time %f \n", float64(harvester_time2-harvester_time1)/float64(1000000000))
fmt.Println(reply)
}
执行结果: go version: go 1.4
cal time 0.185011
9999900000
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3633 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
rpc server端(golang版本):
package main
import (
"errors"
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
const (
URL = "127.0.0.1:5001"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Add(args []Args, reply *int) error {
for i := 0; i < len(args); i++ {
*reply += args[i].A
*reply += args[i].B
}
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
tcpAddr, err := net.ResolveTCPAddr("tcp", URL)
if err != nil {
fmt.Println(err)
}
listener, err := net.ListenTCP("tcp", tcpAddr)
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go jsonrpc.ServeConn(conn)
}
}
rpc client端(golang版本)
package main
import (
"fmt"
_ "net/rpc"
"net/rpc/jsonrpc"
"time"
)
type Args struct {
A, B int
}
const (
URL = "127.0.0.1:5001"
)
func main() {
client, err := jsonrpc.Dial("tcp", URL)
defer client.Close()
if err != nil {
fmt.Println(err)
}
var args [100000]Args //批量参数
for i := 0; i < len(args); i++ {
args[i].A = i
args[i].B = i
}
//fmt.Printf("args %v \n", args)
harvester_time1 := time.Now().UnixNano()
var reply int
err = client.Call("Arith.Add", args, &reply) //批量执行
if err != nil {
fmt.Println(err)
}
harvester_time2 := time.Now().UnixNano()
fmt.Printf("cal time %f \n", float64(harvester_time2-harvester_time1)/float64(1000000000))
fmt.Println(reply)
}
执行结果: go version: go 1.4
cal time 0.185011
9999900000