Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Akka TCP客户端:如何使用Akka actor通过TCP发送消息_Scala_Sockets_Tcp_Akka_Akka Io - Fatal编程技术网

Scala Akka TCP客户端:如何使用Akka actor通过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服务器通信,而不是与另一个参与者通信,为

我想通过TCP发送文本消息。很简单。我想和阿卡这样做。我读了这篇关于akka IO的文章:

本文介绍了TCP客户端的一个简单实现,但我不清楚如何使用这个客户端

  • 构造函数采用InetSocketAddress和ActorRef。InetSocketAddress有意义(我假设这是目的地的名称),但ActorRef是什么?这是我第一次使用akka,但据我所知,ActorRef是另一位演员的参考。既然我的TCP客户机是一个参与者,我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为什么我要给它一个参与者引用

  • 伴星对象中的道具功能是什么

  • 一旦实例化,我将如何使用此参与者发送TCP消息?我是否应该以ByteString的形式向它发送一条包含我想要发送的数据的消息

  • 四,。 两者之间有什么联系/区别

    case Received(data) => 
        listener ! data
    


    回答您的问题:

  • 构造函数
    类客户端(远程:InetSocketAddress,侦听器:ActorRef)扩展Actor
    获取一个
    侦听器
    ,该侦听器是对使用此
    客户端
    与远程服务器通信的Actor的引用。侦听器将通过此
    客户端发送和接收消息。由于
    Client
    是一个参与者,因此您将仅通过发送消息与它进行通信。这同样适用于
    客户端
    连接
    /remote通信时-它将代表您发送和接收消息,并将它们转发给您提供的
    侦听器
  • actor类的伴生对象中的
    props
    函数通常用作构造actor的辅助函数。如果您的参与者接受构造函数参数,并且您必须注意不要关闭可变状态,那么就需要使用它。记住,不能使用
    new
    操作符创建演员,必须调用
    Props
  • 您的
    客户端
    actor一旦连接到远程,将收到
    ByteString
    类型的消息,如
    案例数据:ByteString=>
    中所示。它将把数据写入TCP连接——有效地发送消息。每当它从远程接收到类型为“已接收”
    的响应时,它都会将其转发给您的
    侦听器
    参与者
  • 见3
    Client
    actor从您的
    listener
    connection
    接收消息,并相应地转发它们。但它并没有检查它们来自哪里。因此,每当它通过TestRing接收到
    时,它就会将其发送到
    连接
    /remote;每当它接收到
    接收的
    时,它就会将字节发送到
    侦听器
    。如果你想进行双向交流,你需要确保你的听众能够收到这些信息
  • 这里总结一下双向沟通的情况

    通过TestRing将
    发送到远程:

    MyActor->
    ByteString
    ->Client->
    Write(ByteString)
    ->connection/remote

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

    连接/远程->
    接收(通过TestRing)
    ->客户端->
    通过TestRing
    ->MyActor


    “->”是一个消息发送的位置。

    很好的解释!奇怪的是,我没有从文档描述本身理解整个过程。
    case data: ByteString =>
        connection ! Write(data)