【RPC❄️002】go语言的rpc开发体验

go语言体验rpc调用过程

为了更好的理解之后的grpc框架,我们先体验下go语言rpc开发,即远程调用。

先实现server端

package main

import (
	"net"
	"net/rpc"
)

type HelloServer struct {}

func (hello *HelloServer) Hello(request string, reply *string) error {
    // 注意这个方法并没有返回值,而是通过传进来的指针实现的,修改了指针的值
    // 算是间接的返回一个值
	*reply = "hello " + request
	return nil
}

func main(){
	// 实例化一个server,写一个套接字,就像python里的socket
	listener, _ := net.Listen("tcp",":1234")

	// 注册自己上面的业务逻辑到rpc
    //第一个参数是自己的服务名字随便起,客户端调用的时候会用到
    //第二个参数就是注册自己上面的struct,即业务逻辑,然后client端即可调用自己的业务逻辑函数。
	_ = rpc.RegisterName("helloserver", &HelloServer{}) 

	// 启动服务
	conn, _ := listener.Accept()  //接受一个请求,产生一个套接字
	rpc.ServeConn(conn)           //后续我们就把这个套接字交给rpc接管
}

客户端

import (
	"fmt"
	"net/rpc"
)

func main(){
	// 建立连接
	client, erro := rpc.Dial("tcp", "localhost:1234") //这里还是用的go语言rpc建立连接
	if erro != nil{
		panic("连接出错")
	}
	var reply *string = new(string)
    // 调用自己服务器注册的服务(可以理解成微服务)
	erro = client.Call("helloserver.Hello", "book", reply)  
	if erro != nil{
		panic("调用失败")
	}
	// 打印结果
	fmt.Println(*reply)
}

总结:

这是一个很简单的rpc例子,其实写过python http socket套接字的会有感觉,很像。但是调用方法会有些不一样,
区别就是它可以直接调用你的服务器里的函数。
go语言rpc和python中微服务框架nameko使用起来是差不多的,原理都是一样的。

学习http的一些框架如flask,django,之前我们最好先学习如何自己写tcp socket,并建立连接,才能更好的理解flask和django框架到底为我们都做了什么。这里的代码其实也是为了之后要学习的grpc框架做准备,知道grpc框架为我们做了什么。

这个go rpc序列化协议是go语言特有的GOB,不支持跨语言调用,如果需要跨语言调用需要修改它的序列化协议。
如果改成json的序列化协议,那么就可以支持多语言调用,无论python,java,nuby,php…都可以调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值