Protobuf-net RPC с байтом []? - PullRequest
       39

Protobuf-net RPC с байтом []?

1 голос
/ 25 января 2012

Я использую protobuf-net для передачи данных о состоянии объекта стандартным способом protobuf-net.

Я сериализовал объект, получил массив byte [], зашифровал массив и отправилэто через UDP.Затем клиент получает массив byte [], расшифровывает и десериализует объект, и все работает замечательно.

Мне нравится делать это таким образом, потому что у нас может быть несколько терминалов для просмотра данных, которые не всегда могут быть лучшими илисамое надежное соединение.

Теперь мне нужно добавить несколько механизмов RPC.Я бы очень хотел использовать такой же набор функций (сериализовать, шифровать и перебрасывать через UDP).

У меня уже есть интерфейс, и к нему подключены WCF и XML-RPC.Я смотрел на использование protobuf-net в качестве конечной точки WCF, и я не слишком уверен, что это то, что я ищу.Мне бы очень хотелось иметь возможность обернуть все в схему шифрования, которая у меня уже есть, и использовать много другого кода.

Я посмотрел основные примеры http RPC в protobuf-net и получилискал способ получить байт [] для использования RPC.Я был бы готов написать хороший кусок кода;Я просто не знаю, с чего начать.

Есть идеи?

edit:

Так вот как я обычно отправляю свое сообщение о статусе.Это всего лишь некоторые переменные, сериализованные с protobuf-net

    ProtoBuf.Serializer.SerializeWithLengthPrefix(mStream, Common.Share, ProtoBuf.PrefixStyle.Fixed32);  

    byte[] ptext2 = RNGBytes.Concat(mStream.ToArray()).ToArray();  

    byte[] plainTextBytes = Encoding.UTF8.GetBytes(Convert.ToBase64String(RNGBytes) + plainText);  

    cryptoStream.Write(ptext2, 0, ptext2.Length);

    // Finish encrypting.
    cryptoStream.FlushFinalBlock();

    // Now we're done with the memory stream, let's turn it back into an array of bytes.
    byte[] cipherTextBytes = memoryStream.ToArray();

    foreach (IPEndPoint iep in BroadcastToIPs)
    {
        U.Send(cryptoStream.GetBuffer(), (int)mStream.Length, iep);
    }

    // Close both streams.
    memoryStream.Close();
    cryptoStream.Close();

Теперь у меня есть интерфейс, что-то вроде

public interface { void SetMovementMode(int Axis, int Mode); ..... }

У кого-нибудь есть идеи о том, какзаверните его и отправьте аналогичным образом, с возможностью шифрования и т. д.?

1 Ответ

1 голос
/ 17 августа 2012

Я использую zeroMQ с protobuf-net для выполнения моих RPC (.NET в .NET и python в .NET).ZMQ - это система обмена сообщениями без посредников, которая позволяет отправлять байты [] и создавать различные аккуратные архитектуры с минимальным кодом.Также есть привязки для всех видов языков.Проверьте их руководство здесь

...