如何正确设置gRPC客户端 - 服务器

时间:2018-02-08 07:11:38

标签: go protocol-buffers grpc

我有一个 gRPC 客户端和服务器,当我运行它们时,它们似乎运行良好,但当我尝试使用客户端拨打服务器时出现错误:

"Error": {
    "code": 14,
    "message": "all SubConns are in TransientFailure"
},

不知道它是什么。我试图找到谷歌的解决方案,但没有成功。

有什么想法吗?这是我的服务器代码:

lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cfg.Host, cfg.Port))
if err != nil {
    logger.Critical(ctx, "failed to listen: %v", err)
} else {
    logger.Info(ctx, "[userserver] running at %s:%d", cfg.Host, cfg.Port)
}

grpcServer := grpc.NewServer()
userServer := userserver.New()
pb.RegisterDomainServer(grpcServer, userServer)
rpcErr := grpcServer.Serve(lis)

if rpcErr != nil {
    logger.Critical(ctx, "failed to serve: %v", rpcErr)
}

btw服务器在这里显示log:

  

2018/02/08 07:03:37.603287 INFO:[userserver]在localhost:3001运行

和客户:

conn, err := grpc.Dial(c.serverAddr, grpc.WithInsecure())
if err != nil {
    return err
}
defer conn.Close()

client := pb.NewDomainClient(conn)
_, err = client.Dispatch(ctx, &pb.Command{
    Name:    command,
    Payload: payload,
})

这是port buff

service Domain {
  rpc Dispatch(Command) returns (Response);
}

message Command {
  string name = 1;
  bytes payload = 2;
}

message Response {}

2 个答案:

答案 0 :(得分:0)

  

此错误表示由于某种原因与服务器的连接已关闭。

您正在打印您的服务器在localhost:3001上运行,但不要检查服务器是否在该地址上有任何错误。

将服务器中的最后一行替换为:

if err := grpcServer.Serve(lis); err != nil {
    log.Fatalf("failed to serve: %v", err)
}

服务器启动中的上下文ctx来自哪里?

我假设你的原型定义看起来像那样 - 否则可能还有其他问题:

package ...;

service Domain {
   rpc Dispatch(Command) returns (...) {}
}

message Command {
   ... Name
   ... Payload    
}

答案 1 :(得分:0)

服务器是否正在侦听该端口?

<title>
  Hello world.
</title>

<body onload="startTimer()">
  <div id="img" class="swapingImages"></div>
</body>

您是否将客户端连接到正确的地址?

c.serverAddr应为&#34; 127.0.0.1:3001&#34;