我正在创建一个(非常基本的)分布式应用程序,它有一个Python服务器和一个C#客户端通过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...
(link to complete file in Python)
然后用它来撰写和阅读消息,如下所示:
public static ClientMessage NewCommand(string Name)
{
return new ClientMessage(Protocol.ClientAction.CMD, Protocol.Status.OK, Name);
}
这暂时适用但通常很糟糕:对于想要使用该应用程序作为构建框架的任何人来说,字符串类型和不方便。
我无法决定如何以一种自动化/同步语言特定实现的方式重构此协议,或者,如果协议不同步/过时,则会发出警告?
猜猜我应该查看Enum和/或MessagePack实现的那种东西,但我觉得我没有足够的资格自行继续这个。
TIA。
答案 0 :(得分:2)
我会使用protobuf或thrift。它们旨在解决不同平台之间的数据交换问题。请参阅此示例:Biggest differences of Thrift vs Protocol Buffers?