有不明白的地方欢迎提问交流,共同进步
日积一小步,月累一大步。。。。。
1 .proto文件如下
syntax = "proto3"; // 协议为proto3
package api; // 包名
option go_package = "/;api";
// 空消息
message Empty {};
// 简单返回结果
message ResultCode {
int32 code = 1;
}
enum PushP{
LowPush = 0;
HighPush = 1;
}
message Push {
PushP pushOption=1;
}
// 定义服务,可定义多个服务,每个服务可多个接口
service Data {
//==============================================
//向下位机设置低推,高推
rpc SetPushPressure(Push)returns (ResultCode);
}
//protoc.exe --go_out=plugins=grpc:. api.proto
2 客户端文件如下
package main
import (
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
api "grpc-test/src/test"
"log"
"time"
)
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)
cycleTest()
}
func cycleTest(){
timer := time.NewTicker(time.Millisecond * 100)
for {
select {
case <-timer.C:
//c.GetOrder()
c.setPush()
}
}
}
//枚举通信
func(c *client)setPush(){
var set *api.Push
set = &api.Push{PushOption: api.PushP_LowPush}
v, err := c.receive.SetPushPressure(context.Background(), set)
if err != nil {
log.Fatalf("请求服务失败: %v", err)
}
if v.Code == 1 {
//value= &api.ResultCode{}
fmt.Println("请求成功", v.Code)
}
}
3.服务端程序
package api
import (
"context"
"errors"
"fmt"
"google.golang.org/grpc"
)
var simpleSuccessCode = &ResultCode{
Code: 1,
}
var failCode = &ResultCode{
Code: 2,
}
func (h *dataServer) SetPushPressure(ctx context.Context, value *Push) (*ResultCode, error) {
ctl := service.GetValveControlInstance().Rock.Handle
v := value.GetPushOption()
r := value.GetDrillRotate()
switch v.Number() {
case 0:
ctl.LowPush = true
ctl.HighPush = false
case 1:
ctl.HighPush = true
ctl.LowPush = false
default:
ctl.LowPush = true
}
ctl.PushState=int(v.Number())
c := v.Number()
fmt.Println(c)
return simpleSuccessCode, nil
}
func StartApiService() {
lis, err := net.Listen("tcp", "0.0.0.0:9999")
if err != nil {
panic(err)
}
s := grpc.NewServer()
RegisterDataServer(s, &dataServer{mu: &sync.Mutex{}})
err = s.Serve(lis)
if err != nil {
panic(err)
}
}