gpt4 book ai didi

java - gRPC-java - .proto 文件的编译

转载 作者:行者123 更新时间:2023-12-02 12:27:54 25 4
gpt4 key购买 nike

我已经使用 protobuf 编译器编译了 .proto 文件,并收到了精选的 Java 文件。我收到了一个 proto.java 文件和 .proto 文件中每个项目的 .java 文件,包括消息类型和每个 RPC 调用,例如publicKeyRequest.java 和 Quote.java 作为 RPC 和请求参数类型。

这是我需要的所有文件吗,因为我似乎仍然无法从服务器返回任何简单的响应?

我想生成 PublicKeyRequest RPC 调用的请求。我生成了请求对象,但我不知道如何通过 channel 实际发送它。

这是完整的 .proto 文件:

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.decryptiondevice";
option java_outer_classname = "DecryptionDeviceProto";

package decryptiondevice;

service DecryptionDevice {

// Decryption Request RPC
//
// Request contains ciphertext and proof
// Returns the plaintext record
rpc DecryptRecord(DecryptionRequest) returns (Record) {}

// Get Signed Root Tree Hash RPC
//
// Caller provides a nonce
// Returns a signed RTH and nonce
rpc GetRootTreeHash(RootTreeHashRequest) returns (RootTreeHash) {}


// Get Public key RPC
//
// Returns a Remote attestation report containing the public key as user data
rpc GetPublicKey(PublicKeyRequest) returns (Quote) {}
}


// Decryption Request
// - Byte array containing ciphertext
// - Proofs represented as JSON trees
message DecryptionRequest {
bytes ciphertext = 1;
string proofOfPresence = 2;
string proofOfExtension = 3;
}


// A plaintext record
message Record {
bytes plaintext = 1;
}


// RTH request contains
// - A random nonce
message RootTreeHashRequest {
bytes nonce = 1;
}


// Root Tree Hash
// Random nonce used as message ID
// Signature over rth and nonce
message RootTreeHash {
bytes rth = 1;
bytes nonce = 2;
bytes sig = 3;
}


// Public key request message
message PublicKeyRequest {
bytes nonce = 1;
}


// Attestation Quote, containing the public key
message Quote {
string quote = 1; //some format.. to be defined later
//PEM formatted key
bytes RSA_EncryptionKey = 2;
bytes RSA_VerificationKey = 3;
}

这是我尝试在客户端运行的代码:

public static void main(String[] args) {

DeviceClient client = new DeviceClient("localhost", 50051);
MannagedChanel channel = ManagedChannelBuilder.forAddress("localhost", 50051).usePlaintext(true);

ByteString nonce = ByteString.copyFromUtf8("someRandomString");
PublicKeyRequest keyRequest = PublicKeyRequest.newBuilder().setNonce(nonce).build();

// Here I want to send this to the server
ByteString response = DecryptionDeviceProto.getKey(keyRequest, channel);//this line is not even close to being valid, but this is the sort thing I wish to achieve

Sys.out.println(response);
}

如果这是非常错误的,我很抱歉,我是 gRPC 的新手。关于这个系统的几点:

  • 客户端和服务器已经用 Go 编写,并且已经过测试并且可以使用同一个 .proto 文件。
  • 我正在尝试用 Java 重写客户端以与同一服务器通信。

最佳答案

需要生成两组文件:Java Protobuf 和 Java gRPC。据我所知,对于除 Go 之外的所有语言,这是两个独立的生成步骤(可以合并为一个 protoc 调用,但它们在概念上是独立的)。

您似乎正在生成 Java Protobuf 代码,而不是 Java gRPC 代码。您需要使用 protocprotoc-gen-grpc-java 插件。如果您使用 Maven 或 Gradle,请阅读 grpc-java's README 。如果您手动运行协议(protocol),您可以下载 pre-built binary from Maven Central并参见an answer to a similar question .

关于java - gRPC-java - .proto 文件的编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com