即使是简单的平方根函数,截止日期也超过了误差?



我是一个非常新的gRPC,我已经尝试将截止日期值从1000增加到10000000000

代码如下:

client.js

const path = require('path');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinitition = protoLoader.loadSync(
path.join(__dirname, '../protos/advanced.proto'),
{
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
}
);
const advancedProto = grpc.loadPackageDefinition(packageDefinitition).advanced;
function main() {
const client = new advancedProto.Advanced(
'localhost:50051',
grpc.credentials.createInsecure()
);
client.SqaureRoot({ number: 1 }, { deadline: 10000000000 }, function (err, response) {
console.log(err, response);
});
}
main();

server.js

const path = require('path');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinitition = protoLoader.loadSync(
path.join(__dirname, '../protos/advanced.proto'),
{
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
}
);
const advancedProto = grpc.loadPackageDefinition(packageDefinitition).advanced;
function SqaureRoot(call, callback) {
if (call.request.number > 0) {
return callback(null, { result: call.request.number * call.request.number });
}
return callback({
code: grpc.status.INVALID_ARGUMENT,
message: "The number is not greater than 0"
})
}
function main() {
const Server = new grpc.Server();
Server.addService(advancedProto.Advanced.service, { SqaureRoot });
Server.bindAsync("127.0.0.1:50051", grpc.ServerCredentials.createInsecure(), function() {
Server.start();
console.log(`Server running at 127.0.0.1:50051`);
});
}
main();

proto_file

syntax = "proto3";
package advanced;
service Advanced {
// error handling
rpc SqaureRoot (SquareRootRequest) returns (SquareRootResponse) {};
}
message SquareRootRequest {
int32 number = 1;
}
message SquareRootResponse {
double result = 1;
}

当我从客户端执行代码时,我得到这个错误,无论截止日期值是

node client
Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
at Object.callErrorFromStatus (/Users/Desktop/own/grpc-workspace/advanced/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
at Object.onReceiveStatus (/Users/Desktop/own/grpc-workspace/advanced/node_modules/@grpc/grpc-js/build/src/client.js:180:52)
at Object.onReceiveStatus (/Users/Desktop/own/grpc-workspace/advanced/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:336:141)
at Object.onReceiveStatus (/Users/Desktop/own/grpc-workspace/advanced/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:299:181)
at /Users/Desktop/own/grpc-workspace/advanced/node_modules/@grpc/grpc-js/build/src/call-stream.js:160:78
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 4,
details: 'Deadline exceeded',
metadata: Metadata { internalRepr: Map {}, options: {} }
} undefined

如果我将截止日期值更改为无穷大,则它可以工作。但是我想知道为什么平方根函数不接受截止日期。

这真的很有帮助,你包括一个良好的再现!

我认为你的问题是最后期限是时间点(而不是持续时间)。

所以你要计算截止日期从现在开始加上一些持续时间:

let d = new Date();
let deadline = d.setSeconds(d.getSeconds() + 5);
client.SquareRoot({
number: 1,
}, {
deadline: deadline,
}, (err, response) => {
console.log(err, response);
});
指出

你的代码可以工作,但是:

  1. 你有一个错字SqaureRoot和例如SquareRoot[Request|Response]
  2. SqaureRoot(sic.)计算平方根而不是平方根;-)
  3. 你可能想给你的包和服务更明显的名称,以避免advanced.Advanced
  4. server.start()阻塞,所以你可能想把console.log("server starting")放在它前面。

相关内容

最新更新