Deadline exceeded error 即使它是简单的平方根函数?
Deadline exceeded error even it simple square root function?
我是 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);
});
NOTES
your code will work but:
- you've a typo
SqaureRoot
and e.g. SquareRoot[Request|Response]
.
SqaureRoot
(sic.) calculates the square not the square root ;-)
- You may want to give your package and service more distinct names to avoid
advanced.Advanced
server.start()
is blocking and so you may want to put the console.log("server starting")
before it.
我是 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);
});
NOTES your code will work but:
- you've a typo
SqaureRoot
and e.g.SquareRoot[Request|Response]
.SqaureRoot
(sic.) calculates the square not the square root ;-)- You may want to give your package and service more distinct names to avoid
advanced.Advanced
server.start()
is blocking and so you may want to put theconsole.log("server starting")
before it.