当前位置: 首页 > 知识库问答 >
问题:

Akka TCP客户端:如何使用Akka actor通过TCP发送消息

越鸿才
2023-03-14

>

  • 构造函数接受InetSocketAddress和actorref。InetSocketAddress是有意义的(我假设这是目的地),但是actorref是什么?这是我第一次使用akka,但据我了解,ActorRef是另一个演员的引用。既然我的TCP客户端是一个参与者,并且我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为什么我要给它一个参与者引用?

    伙伴对象中的道具功能是用来做什么的?

    一旦实例化,我将如何使用此参与者发送TCP消息?我是否应该以字节字符串的形式向它发送一条带有我想发送的数据的消息?

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

    case Received(data) => 
        listener ! data
    

    case data: ByteString =>
        connection ! Write(data)
    
  • 共有1个答案

    裴宜春
    2023-03-14

    回答您的问题:

    1. 构造函数类Client(remote:InetSocketAddress,listener:ActorRef)扩展actor接受侦听器,该侦听器是对使用此客户端与远程服务器通信的actor的引用。侦听器将通过此客户端发送和接收消息。由于client是一个参与者,因此您只需通过发送消息与它进行通信。这同样适用于客户端连接/remote通信时,它将代表您发送和接收消息,并将它们转发给您提供的侦听器
    2. actor类的伴生对象中的
    3. props函数通常用作构造actor的帮助函数。如果您的参与者接受构造函数参数,并且您必须注意不要关闭可变状态,则需要使用该参数。请记住,您不能使用new运算符来创建演员,您必须调用props.
    4. 您的客户端执行器将接收ByteString类型的消息,如case data:ByteString=>连接到远程时所示。它将把数据写入TCP连接--有效地发送消息。每当它从远程接收到Received类型的响应时,如case Received(data)=>所示,它将把它转发给您的侦听器执行器。
    5. 参见3。客户端执行器从侦听器连接接收消息,并相应地转发这些消息。但是,它不检查它们来自哪里。因此,每当它接收到ByteString时,它将把它发送到Connection/Remote,每当它接收到Received时,它将把字节发送到Listener。如果要进行双向通信,则需要确保监听器能够接收到这些消息。

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

    ByteString发送到远程:

    MyActor->字节字符串->客户端->写(字节字符串->连接/远程

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

     类似资料:
    • 我尝试将Spring与websocket一起使用。我从本教程开始调查。 在我的侧客户端,我有类似的东西来初始化到服务器的连接: 它工作得很好,在我的控制器中,我可以在下面的类中执行我的过程: 现在我想做的是让一个线程向监听“/主题/问候”的客户端发送消息。我这样写Runnable类: 这样完成了我的控制器: 该方法采用光电控制器。fireGreeting按我的要求调用,但客户端没有发生任何事情。有

    • 问题内容: 我只能在用户的套接字ID直接存储在io.sockets.on(’connect’)函数中时向用户发出消息。我不知道为什么在登录后尝试存储其套接字ID时为什么不起作用。 加工: 无法运作: JavaScript客户端代码段 解决方案:感谢@alessioalex, 我不得不从登录页面中删除对socket.io的引用,并将以下内容添加到io.sockets.on(’connection’)

    • 我有一个程序,它创建一个套接字(服务器和客户端程序),并使用该套接字通过TCP端口发送消息。我的问题是,我如何交换多条消息?每次我发送消息时,端口都会关闭,我需要使用另一个端口发送另一条消息。 例如,我必须从客户端向服务器发送2个数字,服务器需要回复我发送的数字的总和。如何实现在同一端口上发送未定义的数字甚至2个数字? 以下是代码(相当标准的东西): 服务器: 客户: 例如,我运行代码并为服务器端

    • 我正在通过在WebSocketClientFlow上遵循doc来尝试客户端websocket。

    • 问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下

    • 问题内容: 如何检查通过 socket.io 库发送的消息是否已接收到客户端。在socket.io中有特殊的方法吗? 感谢您的回答! 问题答案: 定义事件处理程序时,应使用callback参数。 一个典型的实现如下: 客户端 服务器端 现在,检查服务器端的控制台。它应该显示“ is_it_ok”。接下来在客户端检查控制台。它应该显示“确定”。那就是确认信息。 更新资料 一个socket.io连接本