go语言之路

rpc远程调用

rpc远程调用

首先看我们正常执行程序的过程

func main() {
    var a, b int
    a = 1
    b = 2
    c := Add(a, b)
    fmt.Println("计算结果:", c)
}
func Add(a int, b int) int {
    return a + b
}

rpc简介

RPC是Remote Procedure Call Protocol单词首字母的缩写,简称为:RPC

远程过程调用指的是调用远端服务器上的程序的方法整个过程。

入门案例(实现远程调用实现加法运算)

//server.go服务端
package main

import (
    "log"
    "net"
    "net/http"
    "net/rpc"
)

type NumbersTwo struct {

}

func main() {

    Nt := new(NumbersTwo)
    //注册服务对象
    //该对象必须是结构体对象,通过对象所属的方法暴露给调用者从而提供服务
    err := rpc.Register(Nt)
    if err != nil {
        log.Fatal(err)
    }
    //通过该函数把对象所属的方法的服务注册到http协议上,方便调用者可以利用http的方式进行数据传递
    rpc.HandleHTTP()

    //端口监听
    listen, err := net.Listen("tcp", ":8000")
    if err != nil {
        panic(err.Error())
    }
    err = http.Serve(listen, nil)
    if err != nil {
        panic(err.Error())
    }

}

//远程方法需遵循一定的规则
//对外暴露的方法只能有两个参数第二个参数是指针类型)
//返回值类型是error
//传回的值必须是指针类型
func (n *NumbersTwo) AddTwoNumbers(t map[string]int, result *int) error {

    *result = t["A"] + t["B"]
    return nil

} 
//client.go客户端
package main
import (
    "fmt"
    "net/rpc"
)
func main() {

    //通过http的端口监听方式连接
    client, err := rpc.DialHTTP("tcp", "localhost:8000")
    if err != nil {
        panic(err.Error())
    }
    var result *int
    t := map[string]int{
        "A":2,
        "B":3,
    }
    //调用远端方法
    err = client.Call("NumbersTwo.AddTwoNumbers", t, &result)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println("远程调用程序, 结果为:", *result)
}

go-redis

上一篇

浏览器输入网址获取内容的背后-网络是怎么连接的

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫