オブジェクトのシリアライズされた値 (byte[]) をプロトコル バッファ メッセージの繰り返しフィールドに追加する方法を探しています。
memcached でシリアル化された形式でデータ項目を保持し、それらをリモート クライアントに配信する必要があるアプリケーションがあります。クライアントはキーのリストを提供してデータ項目を要求し、サーバーはデータ項目のリストを送り返します。データ項目の内容はサーバーにとって重要ではありません。それらに何が含まれているかを知る必要はなく、それらのキーを知る必要があるだけです。
現在のアプローチは、memcached から項目をフェッチし、それらを逆シリアル化し、それらを応答のデータ項目のリストに追加し、応答をバイト配列にシリアル化し、ソケット経由で送信することです。データ項目を逆シリアル化して、次のステップで再度シリアル化するため、これは最適ではありません。シリアル化 (memcached 用と出力用) は両方とも、プロトコル バッファーを使用して行われます。理想的には、memcached からデータを取得した後にシリアル化解除をスキップし、シリアル化された値を応答に追加できます。protobuf-net と protobuf-csharp の両方を調べましたが、これを達成する方法が見つかりませんでした。出来ますか?私は何かを見落としましたか?
プロト定義は次のとおりです(簡略化):
message Request {
required int32 messageId;
repeated string keys;
}
message DataItem {
required string key = 1;
required ValueType type = 2; // the type of the value, enumeration
optional int32 intValue = 3;
optional int64 longValue = 4;
optional double doubleValue = 5;
optional float floatValue = 6;
optional bool boolValue = 7;
optional string stringValue = 8;
}
message Response {
required int32 messageId;
repeated DataItem dataItems;
}