Я ищу способ добавить сериализованное значение объекта (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;
}