1

複数の .proto ファイル間でどのサービスが呼び出されているかを理解しようと、リバース エンジニアリングを試みています。私の質問は、行われたすべての呼び出しを処理し、呼び出された関数とサービスの情報を提供するサービスをサーバーに実装できるかどうかです。

例:

プロトコル.プロト

syntax = "proto3";

package greating;

message PersonRequest {
    string name = 1;
    int32 age = 2;
}

message PersonResponse {
    string message = 1;
}

service GreatingService {
    rpc helloPerson (PersonRequest) returns (PersonResponse);
} 

service WarningService {
    rpc attentionPerson (PersonRequest) returns (PersonResponse);
}


サーバー.js

const packageDefinition = protoLoader.loadSync("greating.proto");
const greatingProto = grpc.loadPackageDefinition(packageDefinition);

var server = new grpc.Server();

server.addService(greatingProto.greating.GreatingService.service, {
    helloPerson: function(call, callback) {
        let response = `Hello ${call.request.name}! You're ${call.request.age} years old`;

        return callback(null, { message: response });
    }
});

server.addService(greatingProto.greating.WarningService.service, {
    helloPerson: function(call, callback) {

        let response = `Attention ${call.request.name}! You're  ${call.request.age} years left to live`;

        return callback(null, { message: response });
    }
});


私がやりたいことは、両方の (すべての) 呼び出しを処理し、どのサービスが呼び出されたかを表示する 3 番目の関数を実装することです。このようなもの:

server.addService("*", {
    function(call, callback) {
        let response = `The service ${call.service}, function ${call.function} was called.`;

        return callback(null, { message: response });
    }
});

これを行う方法はありますか?

ありがとうございました。

4

1 に答える 1

1

いいえ、grpc はワイルドカード メソッド ハンドラーや、単一のハンドラーですべての着信要求を処理するその他の方法をサポートしていません。

于 2020-02-24T18:50:20.230 に答える