gpt4 book ai didi

tcp - 通过 TCP 传递方法调用的结果

转载 作者:可可西里 更新时间:2023-11-01 02:40:54 25 4
gpt4 key购买 nike

我想知道如何实现一种“远程方法调用”(以一种非常简单的形式)。我正在以面向对象的方式编写程序。我的对象存在于树莓派上,对象存在于我的计算机上。因此,有时我想从我计算机上的对象向树莓派上的对象发送消息。到目前为止没有什么太难的。但是当我希望该消息有一个结果时,我被卡住了

例如,如何实现我计算机上的一个对象正在向树莓派发送带有参数 3 和 4 的消息“add”并期望结果 (7)?

我制定了一个通过 TCP 向对象发送消息和参数的协议(protocol)。但是如果结果是预期的,我的 Raspberry Pi 上的对象将不得不通过 TCP 发送一条新消息来回答。但是我怎样才能得到那个答案呢?

我可以使用/进行阻塞操作,将消息发送到 Raspberry Pi 并等待结果返回。但在模拟程序中,我想这不是你想要的。

所以我在想如何我可以在不进行阻塞操作的情况下实现它。我想到了这个:

我可以负责通信的对象(通过 TCP)使用“消息表”。在该表中,我可以为每条消息存储 ID、消息本身、目标对象(在树莓派上)和结果。

现在,如果我想发送消息“getNumber”(随机返回一个数字),我将使用消息和目的地调用通信对象。它将用唯一 ID、消息和目的地填充表格。 在特定时刻,目标对象将完成计算并返回结果为此,它将通过 TCP 将其应答发送到通信对象,该通信对象将结果填入表中。从那一刻起,只需传递 ID 即可请求消息的结果。通信对象所要做的就是从他的表中读取结果。

如果不通过 TCP/IP 进行通信,它看起来像:

(destination-object 'get-number) ; Results in a number, with TCP this could not have a result because the result itself also has to be send over TCP.

通过如上所述的通信:

(define id ((communication-object 'send-message) "get-number" "destination-object"))
(define result ((communication-object 'get-result) id))

因为我从未制作过通过 TCP/IP 进行通信的程序,所以我想知道这是否是处理消息及其结果的好方法,或者是否有更好/更简单的方法。

知道我正在用 Racket 编写程序,也许使用 call with current continuation 是实现它的更简单方法(如果可能)?通过保留“ future ”(仍然需要做的事情)直到知道结果。

最佳答案

如果您想利用该领域的其他工作,您可以使用 REST API。

这基本上使用了 HTTP 协议(protocol)的机制,该协议(protocol)运行在 TCP 之上,是浏览器用来连接网站的主要协议(protocol),为主机上的服务提供类似 Web 的 API。返回结果是该架构的标准部分。

它不像 TCP 之上的自定义协议(protocol)那样轻巧,但另一方面,您将能够利用所有内置的错误和边缘情况处理以及庞大的用户社区。

Raspberry 上的 REST 有很多可用的指南:

关于tcp - 通过 TCP 传递方法调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329335/

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