0

我可以使用什么来让基于 C# 的 UI 通过 Internet 与基于 C 的引擎对话?

我有一个用 C 语言编写的数据处理引擎 dll(我称之为服务器),它与用 C# 编写的用户界面客户端对话。虽然我在这里使用术语“客户端”和“服务器”,但我只是在基于 C# 的 UI 使用 P/Invoke 与基于 C 的引擎“对话”的意义上使用它们。

客户端和服务器都只能在 Windows 64 位环境中运行。该引擎是通用 C 语言,可以重新编译以在任何操作系统上运行,但目前(并且很可能正在进行中)我只关心 Windows 操作系统环境。

UI 控制应用程序,引擎坐下来等待来自 UI 的请求。通常,在使用应用程序时,引擎会在 90% 的时间内处于空闲状态。一旦引擎收到来自 UI 的请求,它就会处理请求的数据,并将结果返回给 UI。

在 UI 和引擎之间传递的数据量相对较少。当客户端和引擎进行对话时,客户端发送给引擎的数据量很小(小于 1k),而引擎(通常)发回的数据量小于 5k。

鉴于这种情况,我应该使用什么来让客户端通过 Internet 与引擎对话?

4

4 回答 4

0

您还可以查看protobufsthriftcap'n proto。也许对于你需要的东西来说太多了,但看起来并没有什么坏处。否则,您可以轻松地序列化为 XML、JSON 或其他传输语法。也有像ONC-RPC 和 XDR这样的旧计时器。

于 2013-09-17T16:57:09.107 回答
0

有点偏,但值得考虑。如果您可以将您的 C 代码转换为 Python 扩展(这并不难),那么您就有更多选择,您可以轻松评估并在它们之间切换。Python 有非常好的网络库可用,并且非常乐意与 C 代码交谈。

例如,如果合适,您可以将其公开为 HTTP 服务(并在 C# 中使用 WCF)。或 XMLRPC。或肥皂。或普通插座。

于 2013-09-17T16:22:56.100 回答
0

它需要更多的层,因此需要更多的工作,但我会考虑将您的服务器端代码包装在 Web 服务中。这将使与它的连接完全独立于平台,允许您在未来编写新的 UI(以任何语言)而无需额外的服务器工作。当然,这并不总是正确的举动,这取决于几个因素,包括数据的类型和数量(您提到每笔交易的金额很小,但有多少笔交易?)、安全问题和效率。然而,它是一种成熟的独立于平台的在线传输数据的方法。

于 2013-09-17T16:26:51.623 回答
0

我可以使用什么来让基于 C# 的 UI 通过 Internet 与基于 C 的引擎对话?

任何事物。选择一个协议。写你自己的。

libcurl跨平台的,并且支持许多不同的网络协议,尽管它是为客户端设计的(和 WRT 互联网协议,您通常必须区分客户端和服务器应用程序)。因此,您可以,例如,在 C# 应用程序中实现一个 HTTP 服务器,然后在 C 应用程序中使用 libcurl 实现一个 HTTP 客户端。

网络通常是一项特定于平台的任务,因此如果您不使用这样的库,则必须考虑到这一点。尽管如此,如果您认为这可以使用您自己的简单协议来完成,那应该不会太难(实际上可能更简单的 WRT 服务器)。如果您不了解如何使用现有协议(例如,在 HTTP 中使用 GET 和 POST 交换数据),这也可能会更容易。

于 2013-09-17T16:31:13.153 回答