下面是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
当服务器被托管时,是否有特定的方法连接到服务器?
谢谢
1条答案
按热度按时间3ks5zfa01#
一个可能的问题是您没有将服务器绑定到正确的端口。
在CloudRun中运行的gRPC服务器的唯一特殊要求是侦听由
PORT
环境变量指定的端口