golang两种调用rpc的方法

 更新时间:2016年07月26日 16:19:42   作者:轩脉刃  
这篇文章主要介绍了golang两种调用rpc的方法,结合实例形式分析了Go语言调用rpc的原理与实现方法,需要的朋友可以参考下

本文实例讲述了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语言程序设计有所帮助。

您可能感兴趣的文章:

相关文章

  • go通过benchmark对代码进行性能测试详解

    go通过benchmark对代码进行性能测试详解

    在开发中我们要想编写高性能的代码,或者优化代码的性能时,你首先得知道当前代码的性能,在go中可以使用testing包的benchmark来做基准测试 ,文中有详细的代码示例,感兴趣的小伙伴可以参考一下
    2023-04-04
  • Go语言Gin框架实现HTML页面渲染

    Go语言Gin框架实现HTML页面渲染

    Web开发中,我们经常要面对如何将数据渲染到前端的问题,这就涉及到了模板引擎的知识,Go语言的Gin框架就提供了强大的HTML模板渲染功能,本文就来为大家介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2024-01-01
  • Go语言omitempty选项的实现

    Go语言omitempty选项的实现

    本文主要介绍了Go语言omitempty选项的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Go语言defer的一些神奇规则示例详解

    Go语言defer的一些神奇规则示例详解

    这篇文章主要为大家介绍了Go语言defer的一些神奇规则示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go切片的具体使用

    Go切片的具体使用

    本文主要介绍了Go切片的具体使用,包括声明切片、初始化切片、切片的切割、切片的添加、切片的删除、切片的复制、切片的遍历、多维切片等,感兴趣的可以了解一下
    2023-11-11
  • Golang实现web文件共享服务的示例代码

    Golang实现web文件共享服务的示例代码

    这篇文章主要介绍了Golang实现web文件共享服务的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • gorm 结构体中 binding 和 msg 结构体标签示例详解

    gorm 结构体中 binding 和 msg 结构体标签示例详解

    文章介绍了Gin框架中binding和msg结构体标签的使用,包括基本用法、常用验证规则、自定义验证器、错误信息自定义、控制器使用示例、组合验证规则、跨字段验证和初始化验证器等,这些标签主要用于数据验证、自定义错误信息、参数绑定和表单验证
    2024-11-11
  • golang根据生日计算星座和属相实例

    golang根据生日计算星座和属相实例

    这篇文章主要为大家介绍了golang根据生日计算星座和属相的示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Go语言正则表达式的使用详解

    Go语言正则表达式的使用详解

    正则表达式是一种进行模式匹配和文本操纵的功能强大的工具。这篇文章主要介绍了Go正则表达式使用,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Mac上Go环境和VS Code的正确安装与配置方法

    Mac上Go环境和VS Code的正确安装与配置方法

    Go语言是一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言,Go语言提供了mac下安装包,可直接下载安装包点击安装
    2018-03-03

最新评论