Error: 14 UNAVAILABLE: read ECONNRESET in gRPC Client connec



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

greeter_server.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。

下面是一个连接到上面服务器的客户端。

greeter_client.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:50051更改为greeter-service-abcdefghij-ue.a.run.app时,我得到以下错误:

Error: 14 UNAVAILABLE: read ECONNRESET

是否有一个特定的方式连接到服务器时,它已被托管?

谢谢

一个可能的问题是您没有将服务器绑定到正确的端口。Cloud Run文档说

运行在Cloud Run中的gRPC服务器的唯一特殊要求是监听PORT环境变量指定的端口

最新更新