golang--net/rpc
来源:互联网 发布:ipo 净利润 数据 编辑:程序博客网 时间:2024/06/03 17:07
用这个这个包,我们可以通过网络或者其他I/O的连接来访问其他机器上的方法。一个服务器可以注册一个对象,然后其他机器就可以用对象的类型名来远程调用这个对象的方法。当然这些可以被远程调用的方法需要一些限制:
-the method’s type is exported.
- the method is exported.
- the method has two arguments, both exported (or builtin) types.
- the method’s second argument is a pointer.
- the method has return type error.
直接上可以跑的代码:
首先是服务端,也就是提供被调用方法的一方:
package mainimport ( "errors" "log" "net" "net/http" "net/rpc")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() l, e := net.Listen("tcp", ":1234") if e != nil { log.Fatal("listen error:", e) } http.Serve(l, nil)}
然后是调用方:
package mainimport ("net/rpc""log""fmt")type Args struct { A, B int}type Quotient struct { Quo, Rem int}func main() { client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234") if err != nil { log.Fatal("dialing:", err) } // Synchronous call args := &Args{7,8} var reply int err = client.Call("Arith.Multiply", args, &reply) if err != nil { log.Fatal("arith error:", err) } fmt.Printf("Arith: %d*%d=%d\n", args.A, args.B, reply) // Asynchronous call quotient := new(Quotient) divCall := client.Go("Arith.Divide", args, quotient, nil) replyCall := <-divCall.Done // will be equal to divCall if replyCall.Error != nil { log.Fatal("arith error:", replyCall.Error) } fmt.Printf("Arith: %d/%d=%d...%d", args.A, args.B, quotient.Quo, quotient.Rem) // check errors, print, etc.}
只需要在终端先把服务端启动,然后再启动clinet.go就可以看见server.go里的服务被调用了。
阅读全文
1 0
- golang--net/rpc
- Golang 1.4 net/rpc server源码解析
- Golang RPC
- golang RPC使用
- golang rpc http
- golang rpc tcp
- Golang RPC性能测试
- golang rpc实例分析
- 【GOLANG】第一章 RPC 源码分析
- golang中的rpc包用法
- golang中的RPC调用服务器方法
- 【GOLANG】第二章 RPC client源码分析
- Thrift RPC 使用指南实战(附golang&PHP代码)
- Golang RPC调用例子程序(实现超时机制)
- golang与java间的json-rpc跨语言调用
- Go net/rpc 包总结
- golang net/http包使用
- golang中net包用法
- HTTP缓存机制及原理
- linux内核中断-数据结构-关系图解
- 决策树
- c++ 写注册表让程序开机自启动
- java使用tomcat&&原生ajax
- golang--net/rpc
- (1).hdfs特性及适用场景
- 【数位DP】HDU6148[Valley Number]题解
- hdu 1216
- 成员模板,模板类做类成员
- 51nod1264 线段相交
- 性能调优——mysql
- GCD正在运行的线程停不掉?呵呵
- Leetcode 10. Regular Expression Matching