Крайний срок превысил ошибку, даже если это простая функция квадратного корня?

#node.js #protocol-buffers #grpc #rpc

Вопрос:

Я очень новичок в 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 gt; 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  

Если я изменю значение крайнего срока на бесконечность, то это сработает. Но я хочу знать, почему функция простого квадратного корня не принимает крайний срок.

Ответ №1:

Это действительно помогает, что вы включили хорошую реплику!

Я думаю, ваша проблема в том, что крайние сроки-это моменты времени (а не продолжительность).

Таким образом, вы захотите рассчитать крайний срок с этого момента плюс некоторую продолжительность:

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

Примечания ваш код будет работать, но:

  1. у вас опечатка SqaureRoot и, например SquareRoot[Request|Response] .
  2. SqaureRoot (sic.) вычисляет квадрат, а не квадратный корень 😉
  3. Возможно, вы захотите дать своему пакету и услуге более четкие имена, чтобы избежать advanced.Advanced
  4. server.start() блокируется, и поэтому вы, возможно, захотите поставить console.log("server starting") его перед этим.