gpt4 book ai didi

c# - 如何为简单的 API 设计跨语言 RPC 协议(protocol)?

转载 作者:行者123 更新时间:2023-12-01 05:30:53 27 4
gpt4 key购买 nike

我正在制作一个(非常基本的)分布式应用程序,它有一个 Python 服务器和一个 C# 客户端,通过 ZeroMQ 通过 json 相互通信。当客户端调用一个方法时,它会编写一条消息并将其发送到服务器,在服务器上执行相应的函数,因此它基本上是一种 RPC。

为了了解如何处理消息,应用程序依赖于在客户端和服务器端重复的“协议(protocol)”(实际上是一组关键字),如下所示:

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);
}

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

我无法决定如何重构此协议(protocol),以便自动/同步特定于语言的实现,或者例如在协议(protocol)不同步/过时时发出警告?

我想我应该研究一下 Enums 和/或 MessagePack 实现的某种东西,但我觉得自己没有足够的资格来继续处理这个问题。

TIA。

最佳答案

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

关于c# - 如何为简单的 API 设计跨语言 RPC 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com