Как подойти к межязычному протоколу RPC для простого API?

Я создаю (очень простое) распределенное приложение, в котором есть сервер Python и клиент С#, разговаривающий друг с другом через json over ZeroMQ. Когда метод вызывается на клиенте, он формирует сообщение и отправляет его на сервер, на котором выполняется соответствующая функция, поэтому в основном это своего рода RPC.

Чтобы понять, что делать с сообщениями, приложение полагается на "протокол" (фактически набор ключевых слов), который дублируется на стороне клиента и сервера, примерно так:

namespace Draftsocket
{
    public static class Protocol
    {
        public struct ClientAction
        {
            //client-issued action lines
            public const string CMD = "COMMAND";
            public const string ERROR = "CLIENT_ERROR";
            public const string EVENT = "EVENT";
            public const string CONTINUE = "CONTINUE";
            public const string CONSOLE = "CONSOLE";
        }
    ...etc...

(ссылка на полный файл на С#)

class Protocol(object):

    class ClientAction:
        CMD = "COMMAND"
        ERROR = "CLIENT_ERROR"
        EVENT = "EVENT"
        CONTINUE = "CONTINUE"
        CONSOLE = "CONSOLE"
...etc...

(ссылка на полный файл в Python)

Затем он используется для составления и чтения сообщений, например:

public static ClientMessage NewCommand(string Name)
{
    return new ClientMessage(Protocol.ClientAction.CMD, Protocol.Status.OK, Name);
}

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

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

Угадайте, что я должен посмотреть в Enums и/или что-то вроде MessagePack, но я не чувствую себя достаточно компетентным, чтобы продолжать самостоятельно.

ТИА.

+1
02 дек. '13 в 15:16
источник поделиться
1 ответ

Я бы использовал protobuf или бережливость. Они предназначены для решения проблемы обмена данными между различными платформами. См. Это, например: Самые большие различия в Thrift vs Protocol Buffers?

+2
02 дек. '13 в 15:22
источник

Посмотрите другие вопросы по меткам или Задайте вопрос