golang RPC使用
来源:互联网 发布:安卓虚拟机for mac 编辑:程序博客网 时间:2024/06/05 14:13
github:https://github.com/ZhangzheBJUT/blog/blob/master/golang_rpc.md
一 HTTP RPC
服务端代码
package mainimport ("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 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.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()) }}
客户端代码
package mainimport ( "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) }}
二 JSON-RPC
服务器端代码
package mainimport ("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.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) }}
客户端代码
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) }
0 0
- golang RPC使用
- Golang RPC
- golang rpc http
- golang rpc tcp
- Golang RPC性能测试
- golang rpc实例分析
- golang--net/rpc
- 【GOLANG】第一章 RPC 源码分析
- golang中的rpc包用法
- golang中的RPC调用服务器方法
- Golang 1.4 net/rpc server源码解析
- 【GOLANG】第二章 RPC client源码分析
- 【golang】golang redis 的使用
- Thrift RPC 使用指南实战(附golang&PHP代码)
- Golang RPC调用例子程序(实现超时机制)
- golang与java间的json-rpc跨语言调用
- 使用hadoop RPC实现RPC调用
- rpc以及php使用到的rpc
- ubuntu下源码安装mysql-5.1.34
- MFC编程小经验点积累(以后待补充)
- Andriod 常用对话框
- JSOUP初探
- [ M3 PN ] STM32F10XXX MDK-RAM USART1 + RS232向PC发数据
- golang RPC使用
- MySQL在远程访问时非常慢的解决skip-name-resolve
- 由浅到深详细讲解JSP自定义标签
- 收集的知识点:hibernate配置文件
- android 添加快捷方式并且图标上添加数字
- 【oralce】查询空缺日期
- time函数总结
- python数据结构与算法 17 列表
- VS2010彻底卸载