golang RPC相关笔记

rpc使用步骤

服务端
  • 注册rpc 的服务对象。给对象绑定方法
    rpc.RegisterName("服务名",回调对象)
1.需要定义类
2.需要绑定类方法
  • 需要创建监听器
listener,err := net.Listen()
  • 建立链接
conn,err := listener.Accept()
  • 将链接绑定 rpc服务
rpc.ServerConn(conn)
客户端
  • 用rpc链接服务器 rpc.Dial()
conn,err:=rpc.Dial()

  • 调用远程函数
conn.Call("服务名.方法名",传入参数,传出参数)

server端

package main

import (
	"fmt"
	"net"
	"net/rpc"
)

type World struct {
}

func (this *World) HelloWorld(name string, resp *string) error {
	*resp = name + " 你好!"
	return nil
}
func main() {
	//1,注册rpc服务 绑定对象方法
	err := rpc.RegisterName("hello", new(World))
	if err != nil {
		fmt.Println("注册出错:", err)
		return
	}
	//2.设置监听
	listener, err := net.Listen("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("监听出错:", err)
		return
	}
	defer listener.Close()
	fmt.Println("开始监听---------")
	//	3,建立链接
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("Accept err:", err)
		return
	}
	defer conn.Close()
	fmt.Println("链接建立成功----------")
	//	4.绑定服务
	rpc.ServeConn(conn)
}

client端

package main

import (
	"fmt"
	"net/rpc"
)

func main() {
	//	1.用rpc链接服务器

	conn, err := rpc.Dial("tcp", "127.0.0.1:8080")

	if err != nil {
		fmt.Println("客户端链接出错000000:", err)
	}
	defer conn.Close()
	//	2.调用远程函数
	var reply string
	err = conn.Call("hello.HelloWorld", "李白", &reply)
	if err != nil {
		fmt.Println("Call出错:", err)
	}

	fmt.Println("reply-------------")
	fmt.Println(reply)
}

修改客户端

修改客户端使用jsonrpc

conn,err := jsonrpc.Dial("tcp","127.0.0.1:8080")

服务器端修改

修改服务器端 使用jsonrpc

jsonrpc.SverveConn(conn)//修改服务绑定

如果绑定方法返回值的error 不为空 无论传出参数是否有值,服务端都不会返回数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

托马斯的冰淇淋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值