NodeJS 错误:14不可用:在gRPC客户端连接中读取ECONNRESET

u59ebvdq  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(384)

下面是NodeJS中一个非常小的gRPC服务器。

    • 欢迎服务器. js**
var PROTO_PATH = __dirname + '/../../protos/helloworld.proto';
var grpc = require('@grpc/grpc-js');
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).helloworld;

function sayHello(call, callback) {
  callback(null, {message: 'Hello ' + call.request.name});
}

function main() {
  var server = new grpc.Server();
  server.addService(hello_proto.Greeter.service, {sayHello: sayHello});
  server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
    server.start();
  });
}

main();

我能够在Cloud Run中托管上述服务器,并获得了一个URL来访问该服务器,其格式为https://greeter-service-abcdefghij-ue.a.run.app
下面是一个客户端连接到上面的服务器。

    • 欢迎客户端. js**
var PROTO_PATH = __dirname + '/../../protos/helloworld.proto';

var parseArgs = require('minimist');
var grpc = require('@grpc/grpc-js');
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).helloworld;

function main() {

  var target = 'localhost:50051'; //If I change this to greeter-service-abcdefghij-ue.a.run.app I get an error
  var client = new hello_proto.Greeter(target,
                                       grpc.credentials.createInsecure());
  var user='world';
  client.sayHello({name: user}, function(err, response) {
    console.log('Greeting:', response.message);
  });
}

main();

如果我在localhost上同时运行服务器和客户端,那么一切都很正常,但是当我将客户端的连接地址从localhost:50051更改为greeter-service-abcdefghij-ue.a.run.app时,我得到了以下错误:
错误:14不可用:读取ECONNRESET
当服务器被托管时,是否有特定的方法连接到服务器?
谢谢

3ks5zfa0

3ks5zfa01#

一个可能的问题是您没有将服务器绑定到正确的端口。
在CloudRun中运行的gRPC服务器的唯一特殊要求是侦听由PORT环境变量指定的端口

相关问题