GO RPC
2015-10-02 16:19
471 查看
HTTP RPCSERVER CODE
package main import ( "errors" "fmt" "net/http" "net/rpc" ) const ( URL = "192.168.2.172:12981" ) type Args struct { A, B int } type Quotient struct { Quo, Rem int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil } func (t *Arith) Divide(args *Args, quo *Quotient) error{ if args.B == 0 { return errors.New("divide by zero!") } quo.Quo = args.A / args.B quo.Rem = args.A % args.B return nil } func main() { arith := new(Arith) rpc.Register(arith) rpc.HandleHTTP() err := http.ListenAndServe(URL, nil) if err != nil { fmt.Println(err.Error()) } }client code
package mainimport (二 JSON-RPCserver code
"fmt"
"net/rpc”
)const (
URL = "192.168.2.172:12982"
)func main() {client, err := rpc.DialHTTP("tcp", URL)
if err != nil {
fmt.Println(err.Error())
}args := Args{2, 4}
var reply int
err = client.Call("Arith.Multiply", &args, &reply)if err != nil {
fmt.Println(err.Error())
} else {
fmt.Println(reply)
}
}
package mainimport (client code
"errors"
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)const (
URL= "192.168.2.172:12981"
)type Args struct {
A, B int
}
type Quotient struct {
Quo, Rem int
}type Arith intfunc (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func (t *Arith) Divide(args *Args, quo *Quotient) error {
if args.B == 0 {
return errors.New("divide by zero!")
}quo.Quo = args.A / args.B
quo.Rem = args.A % args.Breturn 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)
}
}
package mainimport (
"fmt"
"net/rpc”
)const (
URL = "192.168.2.172:12982"
)func main() {client, err := jsonrpc.Dial("tcp", URL)
defer client.Close()if err != nil {
fmt.Println(err)
}args := Args{7, 2}
var reply int
err = client.Call("Arith.Multiply", &args, &reply)
if err != nil {
fmt.Println(err)
}
fmt.Println(reply)
}
相关文章推荐
- 7-v4l2——format negotiation 格式协商
- GOF 23设计模式之 外观模式 迪米特法则
- BA-siemens-desigo_cc安装
- Alpha-expansion and Alpha-beta-swap Algorithm Flow
- hdu acm 4341 Gold miner
- Go-简洁的并发
- hihocoder#1044状态压缩dp+滚动数组
- HDOJ 1902 The Dragon of Loowater【贪心】
- 搜索的正确姿势
- 精读《In The Plex》,这本迄今为止最全面解析Google却迟迟没有
- GOF 23设计模式之 装饰模式(Decorator)
- UVA 11292 Dragon of Loowater
- Golang 1.3 发布时间。最终找到地方下载。
- 【点到线段距离】URAL - 1348 Goat in the Garden 2
- Hugo探究
- LightOJ 1259 Goldbach`s Conjecture
- Go 语言并发笔记
- codeforces #322 div 2 D. Three Logos (枚举)
- Django CSRF原理分析
- Codeforces Round #322 (Div. 2) D. Three Logos 模拟