Scala Akka TCP客户端:如何使用Akka actor通过TCP发送消息
我想通过TCP发送文本消息。很简单。我想和阿卡这样做。我读了这篇关于akka IO的文章: 本文介绍了TCP客户端的一个简单实现,但我不清楚如何使用这个客户端Scala Akka TCP客户端:如何使用Akka actor通过TCP发送消息,scala,sockets,tcp,akka,akka-io,Scala,Sockets,Tcp,Akka,Akka Io,我想通过TCP发送文本消息。很简单。我想和阿卡这样做。我读了这篇关于akka IO的文章: 本文介绍了TCP客户端的一个简单实现,但我不清楚如何使用这个客户端 构造函数采用InetSocketAddress和ActorRef。InetSocketAddress有意义(我假设这是目的地的名称),但ActorRef是什么?这是我第一次使用akka,但据我所知,ActorRef是另一位演员的参考。既然我的TCP客户机是一个参与者,我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为
case Received(data) =>
listener ! data
及
回答您的问题:
类客户端(远程:InetSocketAddress,侦听器:ActorRef)扩展Actor
获取一个侦听器
,该侦听器是对使用此客户端
与远程服务器通信的Actor的引用。侦听器将通过此客户端发送和接收消息。由于Client
是一个参与者,因此您将仅通过发送消息与它进行通信。这同样适用于客户端
与连接
/remote通信时-它将代表您发送和接收消息,并将它们转发给您提供的侦听器
props
函数通常用作构造actor的辅助函数。如果您的参与者接受构造函数参数,并且您必须注意不要关闭可变状态,那么就需要使用它。记住,不能使用new
操作符创建演员,必须调用Props
客户端
actor一旦连接到远程,将收到ByteString
类型的消息,如案例数据:ByteString=>
中所示。它将把数据写入TCP连接——有效地发送消息。每当它从远程接收到类型为“已接收”的响应时,它都会将其转发给您的侦听器参与者
Client
actor从您的listener
和connection
接收消息,并相应地转发它们。但它并没有检查它们来自哪里。因此,每当它通过TestRing接收到时,它就会将其发送到连接
/remote;每当它接收到接收的
时,它就会将字节发送到侦听器
。如果你想进行双向交流,你需要确保你的听众能够收到这些信息
发送到远程:
MyActor->ByteString
->Client->Write(ByteString)
->connection/remote
通过TestRing从远程接收(服务器与客户端对话):
连接/远程->接收(通过TestRing)
->客户端->通过TestRing
->MyActor
“->”是一个消息发送的位置。很好的解释!奇怪的是,我没有从文档描述本身理解整个过程。
case data: ByteString =>
connection ! Write(data)