C# 如何为一个简单的API进行跨语言RPC协议设计?

C# 如何为一个简单的API进行跨语言RPC协议设计?,c#,python,protocols,rpc,C#,Python,Protocols,Rpc,我正在制作一个(非常基本的)分布式应用程序,它有一个Python服务器和一个C#客户机,通过ZeroMQ上的json相互通信。当在客户机中调用一个方法时,它会编写一条消息并将其发送到执行相应函数的服务器,因此它基本上是一种RPC 为了理解如何处理这些消息,该应用程序依赖于一个“协议”(实际上是一组关键字),该协议在客户端和服务器端重复,如下所示: namespace Draftsocket { public static class Protocol { publ

我正在制作一个(非常基本的)分布式应用程序,它有一个Python服务器和一个C#客户机,通过ZeroMQ上的json相互通信。当在客户机中调用一个方法时,它会编写一条消息并将其发送到执行相应函数的服务器,因此它基本上是一种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...
public static ClientMessage NewCommand(string Name)
{
    return new ClientMessage(Protocol.ClientAction.CMD, Protocol.Status.OK, Name);
}
()

()

然后,它用于撰写和阅读消息,如下所示:

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...
public static ClientMessage NewCommand(string Name)
{
    return new ClientMessage(Protocol.ClientAction.CMD, Protocol.Status.OK, Name);
}
这在目前是可行的,但通常是很糟糕的:类型严格,对于任何想将应用程序用作构建框架的人来说都很不方便

我无法决定如何重构该协议,使其自动/同步到特定语言的实现,或者,例如,在协议不同步/过时时发出警告

我想我应该研究一下枚举和/或类似MessagePack实现的东西,但我觉得自己并没有足够的资格来处理这个问题


TIA.

我会使用protobuf或节俭。它们旨在解决不同平台之间的数据交换问题。请参见此示例:

Protobuf then?。。我以前被指示过使用它们,所以我将对此进行调查。协议缓冲区的设计是为了解决这类问题,还是只是碰巧有这种次要用途?