包:net/rpc
1、基于tcp且使用socket,所以必须创建socket服务端
l, err := net.Listen("tcp",":8080")
2、创建一个struct,基本规则如下:
方法可导出(首字母大写);
方法有2个参数,都是可导出类型或内建类型;
方法的第二个参数是指针类型,第一个参数是接收的参数,第二个参数是返回的参数(客户端得到的值);
函数有error返回
type UserServer struct {
}
func (this *UserServer)GetUserName(userId int,userName *string) error {
if userId == 110 {
*userName = "110号用户的名字"
}else {
*userName = "找不到用户"
}
return nil
}
3、创建rcp服务端代码:
func main() {
//创建sokcet监听对象
l, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println(err)
return
}
//给rpc注册函数
rpc.Register(new(UserServer))
for {
//接收客户端的消息
client, err := l.Accept()
if err != nil {
fmt.Println(err)
return
}
//开启rpc服务
rpc.ServeConn(client)
}
}
运行程序,开启服务。
4、rpc客户端代码去调用:
package main
import (
"fmt"
"net/rpc"
)
func main() {
client, err := rpc.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println(err)
return
}
//调用rcp的方法
userName := ""
err1 := client.Call("UserServer.GetUserName", 110, &userName)
if err1 != nil {
fmt.Println(err1)
return
}
//会打印:110号用户的名字
fmt.Println(userName)
}
调用UserServer.GetUserName()得到数据。
本文介绍如何使用Go语言实现一个基于TCP的RPC服务端与客户端,通过创建socket服务端并定义UserServer结构体及GetUserName方法,实现用户名称的获取功能。客户端通过调用UserServer.GetUserName()方法,成功获取并打印用户名称。
566

被折叠的 条评论
为什么被折叠?



