如何为简单的API进行跨语言RPC协议设计? - c#

我正在制作一个(非常基本的)分布式应用程序,该应用程序具有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...

(link to complete file in C#)

class Protocol(object):

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

(link to complete file in Python)

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

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

这暂时是可行的,但是通常很糟糕:对于想要使用该应用程序作为构建框架的任何人,字符串类型且不方便。

我无法决定如何以某种方式重构该协议,该方式将使特定于语言的实现彼此自动化/同步,或者例如在协议不同步/过时时发出警告?

猜猜我应该研究Enums和/或MessagePack实现的某种东西,但我觉得自己没有资格独自进行此工作。

TIA。

参考方案

我会使用protobuf或节俭。它们旨在解决不同平台之间的数据交换问题。例如,请参见此:Biggest differences of Thrift vs Protocol Buffers?

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…

Python:在不更改段落顺序的情况下在文件的每个段落中反向单词? - python

我想通过反转text_in.txt文件中的单词来生成text_out.txt文件,如下所示:text_in.txt具有两段,如下所示:Hello world, I am Here. I am eighteen years old. text_out.txt应该是这样的:Here. am I world, Hello old. years eighteen a…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…