GRPC bidi流配置

问题描述 投票:0回答:1

我按照这个GRPC的介绍 视频 在客户端和服务器之间实现一个简单的 bidi 流。

可能是我在实现中遗漏了什么,实际上我收到了这个错误。

Error. 14 UNAVAILABLE: GOAWAY received 14 UNAVAILABLE: GOAWAY received

这是我的代码。

-Proto:

syntax = "proto3";
package nbsb;

message EchoMessage {
  string value = 1;
  int32 value2 = 2;
}

service EchoService {
  rpc Echo (EchoMessage) returns (EchoMessage);

  rpc EchoClientStream (stream EchoMessage) returns (EchoMessage);

  rpc EchoServerStream (EchoMessage) returns (stream EchoMessage);

  rpc EchoBidiStream (stream EchoMessage) returns (stream EchoMessage);
}

-Proto: -Server

var PROTO_PATH = __dirname + '/echo.proto';

var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
    PROTO_PATH,
    {keepCase: true,
     longs: String,
     enums: String,
     defaults: true,
     oneofs: true
    });

var hello_proto = grpc.loadPackageDefinition(packageDefinition).nbsb;
const { Server } = require('grpc-server-js');

function main() {
    const server = new Server();
    server.addService(hello_proto.EchoService.service, {
        EchoBidiStream(stream){
            stream.on('error', console.error);
            stream.on('data', (data)=>{stream.write(data)});
            stream.on('end',()=>stream.end());
            }

    });


      server.bind('localhost:55555');
  }

  main();

-客户端。

var PROTO_PATH = __dirname + '/echo.proto';

var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(PROTO_PATH, {keepCase: true, longs: String, enums: String, defaults: true, oneofs: true});
var hello_proto = grpc.loadPackageDefinition(packageDefinition).nbsb;

function main() {
  var client = new hello_proto.EchoService('localhost:55555',grpc.credentials.createInsecure());

    const stream = client.EchoBidiStream();

    stream.on('error', console.error);
    stream.on('data',console.log);
    stream.on('end',()=>client.close());


    stream.write({data:{value: "hello", value2:1}});
    stream.end({});

}

main()

服务器实现是grpc-server-js。

是我遗漏了什么,还是有什么问题?

谢谢大家的帮助!

node.js stream grpc bidi
1个回答
0
投票

你需要调用 server.start() 在成功绑定 port 后才开始处理请求。server.bind 返回一个承诺,所以您应该 await 该承诺 promise.then 以了解何时绑定成功。

© www.soinside.com 2019 - 2024. All rights reserved.