go grpc在两个文件中的实现
文档结构
服务端实现文件:
客户端实现文件:
1.创建.proto接口文件
syntax = "proto3"; // 协议为proto3
package api; // 包名
option go_package = "/;api";
// 简单返回结果
message ResultCode {
int32 code = 1;
}
//接收按键名字和bool命令
message ButtonSet{
string buttonName = 1;
bool value = 2;
}
// 定义服务,可定义多个服务,每个服务可多个接口
service Data {
//==============================================
rpc SetHandleButton(ButtonSet)returns(ResultCode);
}
接口文件编译命令:
protoc.exe --go_out=plugins=grpc:. api.proto
2,创建服务端
//接收上位机手柄按键命令
func (d *dataServer) SetHandleButton(ctx context.Context, value *ButtonSet) (*ResultCode, error) {
ctl := service.GetValveControlInstance().Rock.Handle
switch value.ButtonName {
case "autoDrill":
ctl.AutoDrill = value.Value //自动钻进
case "forceShock":
ctl.ForceShock = value.Value //强制冲击
case "pauseOrRun":
ctl.PauseOrRun = value.Value
case "lastHole":
ctl.LastHole = value.Value
case "nextHole":
ctl.NextHole = value.Value
case "eagleArmUp":
ctl.EagleArmUp = value.Value //鹰式臂升
case "eagleArmDown":
ctl.EagleArmDown = value.Value //鹰式臂降
case "estop":
ctl.Estop = value.Value //急停按钮
}
return simpleSuccessCode, nil
}
func StartApiService() {
lis, err := net.Listen("tcp", ":9999")
if err != nil {
panic(err)
}
s := grpc.NewServer()
RegisterDataServer(s, &dataServer{mu: &sync.Mutex{}})
err = s.Serve(lis)
if err != nil {
panic(err)
}
}
3.创建客户端
package main
import (
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
api "grpc-test/src/test"
"log"
)
type client struct {
receive api.DataClient
}
var c client = client{}
func main() {
// 建立连接到gRPC服务
conn, err := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
// 函数结束时关闭连接
defer conn.Close()
// 创建Waiter服务的客户端
//t := test.NewWaiterClient(conn)
c.receive = api.NewDataClient(conn)
c.order()
}
func (c *client) order() {
var set *api.ButtonSet
set = &api.ButtonSet{
ButtonName: "autoDrill",
Value: false,
}
v, err := c.receive.SetHandleButton(context.Background(), set) //autoDrill,forceShock,pauseOrRun
if err != nil {
log.Fatalf("请求服务失败: %v", err)
}
if v.Code == 1 {
//value= &api.ResultCode{}
fmt.Println("请求成功", v.Code)
}
}
4.通信测试
API server listening at: 127.0.0.1:54239
请求成功 1
有不清楚的欢迎各位仁人志士交流讨论,多学习,多进步