gpt4 book ai didi

scala - Akka TCP 客户端 : How can I send a message over TCP using akka actor

转载 作者:可可西里 更新时间:2023-11-01 02:31:58 27 4
gpt4 key购买 nike

我想通过 TCP 发送文本消息。相当容易。我想用 akka 这样做。我读了这篇关于 akka IO 的文章: http://doc.akka.io/docs/akka/snapshot/scala/io-tcp.html

文章介绍了 TCP 客户端的简单实现,但我不清楚如何使用该客户端。

  1. 构造函数采用 InetSocketAddress 和 ActorRef。 InetSocketAddress 是有道理的(我假设这是目的地的地址)但是 ActorRef 是什么?这是我第一次使用 akka,但据我了解,ActorRef 是另一个 Actor 的引用。由于我的 TCP 客户端是一个 actor,我希望这个 TCP actor 与 TCP 服务器通信,而不是与另一个 actor 通信,为什么我要给它一个 actor ref?

  2. 伴生对象中的 props 函数有什么用?

  3. 实例化后,我将如何使用此 actor 发送 TCP 消息?我是否应该只向它发送一条消息,其中包含我想以 ByteString 形式发送的数据?

4.之间有什么联系/区别

case Received(data) => 
listener ! data

case data: ByteString =>
connection ! Write(data)

最佳答案

回答您的问题:

  1. 构造函数 class Client(remote: InetSocketAddress, listener: ActorRef) extends Actor 接受一个 listener,它是对使用此 Client 的 actor 的引用 与远程服务器通信。 Listener 将通过此 Client 发送和接收消息。由于 Client 是一个 actor,您将仅通过发送消息与它通信。这同样适用于 Client 当它与 connection/remote 通信时 - 它会代表您发送和接收消息并将它们转发给 listener你提供了。
  2. props 函数在 actor 类的伴生对象中通常用作构建 actor 的辅助函数。如果您的 actor 接受构造函数参数并且您必须注意不要关闭可变状态,则需要它。请记住,您不能使用 new 运算符来创建 Actor ,您必须调用 Props
  3. 您的 Client actor 将收到类型为 ByteString 的消息,如 case data: ByteString => 一旦连接到远程。它会将数据写入 TCP 连接——有效地发送消息。每当它收到来自 Received 类型的远程响应时,如 case Received(data) => 中那样,它会将其转发给您的 listener actor。
  4. 参见 3. Client actor 从您的 listenerconnection 接收消息并相应地转发它们。但是它不会检查它们来自哪里。因此,每当它收到 ByteString 时,它就会将其发送到 connection/remote,而每当它收到 Received 时,它就会将字节发送到 listener。如果您想进行双向通信,您需要确保您的听众可以收到这些消息。

这里总结一下双向通信的样子。

发送ByteString到远程:

MyActor -> ByteString -> 客户端 -> Write(ByteString) -> 连接/远程

从远程接收 ByteString(服务器与客户端对话):

连接/远程 -> Received(ByteString) -> Client -> ByteString -> MyActor

其中 '->' 是发送的消息。

关于scala - Akka TCP 客户端 : How can I send a message over TCP using akka actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33747858/

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