【发布时间】:2022-09-28 00:04:53
【问题描述】:
我只是在尝试grpc。我用nodejs做了一个简单的客户端和服务器 原型文件:
syntax = \"proto3\";
message Empty {}
message EchoRequest {
string message = 1;
}
message EchoResponse {
string message = 1;
int32 message_count = 2;
}
// A simple echo service.
service EchoService {
// One request followed by one response
// The server returns the client message as-is.
rpc echo(EchoRequest) returns (EchoResponse);
}
客户端.js
const grpc = require(\"@grpc/grpc-js\");
var protoLoader = require(\"@grpc/proto-loader\");
const PROTO_PATH = \"./echo.proto\";
const options = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
var packageDefinition = protoLoader.loadSync(PROTO_PATH, options);
const EchoService = grpc.loadPackageDefinition(packageDefinition).EchoService;
const client = new EchoService(
\"165.22.201.129:9090\",
grpc.credentials.createInsecure()
);
client.echo({message: \"test\"}, (error, response) => {
console.log(\"Error:\", error)
console.log(\"Response message\", response.message);
});
服务器.js
const grpc = require(\"@grpc/grpc-js\");
const PROTO_PATH = \"./echo.proto\";
var protoLoader = require(\"@grpc/proto-loader\");
const options = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
var messageCount = 0;
var packageDefinition = protoLoader.loadSync(PROTO_PATH, options);
const echoProto = grpc.loadPackageDefinition(packageDefinition);
const server = new grpc.Server();
server.addService(echoProto.EchoService.service, {
echo: (call, callback) => {
console.log(\"request message:\", call.request.message, \"index\", messageCount)
callback(null, {message: \"response test\"});//call.request.message);
},
});
const ip = \"0.0.0.0:9090\";
server.bindAsync(
ip,
grpc.ServerCredentials.createInsecure(),
(error, port) => {
console.log(\"error is:\", error)
console.log(\"Server running at\", ip);
server.start();
}
);
我正常运行客户端和服务器,没有使用像 docker 容器这样的东西。 在本地运行时,一切正常。但是,当我在 ip: 165.22.201.129 的数字海洋水滴中运行服务器时。它不起作用。 服务器确实收到了没有问题的请求,但是在使用回调时,我在客户端上收到以下错误:
Error: Error: 13 INTERNAL: Received RST_STREAM with code 0
at Object.callErrorFromStatus (D:\\Github\\EpicFlowServer\\node_modules\\@grpc\\grpc-js\\build\\src\\call.js:31:26) at Object.onReceiveStatus (D:\\Github\\EpicFlowServer\\node_modules\\@grpc\\grpc-js\\build\\src\\client.js:189:52)
at Object.onReceiveStatus (D:\\Github\\EpicFlowServer\\node_modules\\@grpc\\grpc-js\\build\\src\\client-interceptors.js:365:141)
at Object.onReceiveStatus (D:\\Github\\EpicFlowServer\\node_modules\\@grpc\\grpc-js\\build\\src\\client-interceptors.js:328:181)
at D:\\Github\\EpicFlowServer\\node_modules\\@grpc\\grpc-js\\build\\src\\call-stream.js:187:78
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 13,
details: \'Received RST_STREAM with code 0\',
metadata: Metadata { internalRepr: Map {}, options: {} }
}
我尝试在网上查找,但找不到任何帮助。 有谁知道可能出了什么问题?
-
您是否能够在没有 grpc 的情况下获得类似于此工作的设置(意味着只是普通的客户端和服务器)。这将有助于排除任何与 grpc 相关的问题。看起来客户收到了RST_STREAM。服务器端的日志是否表明任何有用的信息?