gpt4 book ai didi

scala - Akka TCP IO 向我发送两次连接消息

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

我有一个简单的客户端服务器程序服务器监听如下

val manager = IO(Tcp)    
manager ! Bind(self, myAddress,1,options)

然后在接收循环

override def receive = {
case b @ Bound(addr) =>
{
log.info("bound")
myAddress = addr
bBound = true
}
case c @ Connected(remoteAddress,localAddress) =>
log.info("Client Connected. Remote: {} Local: {}", remoteAddress, localAddress)
myAPAddress = remoteAddress
remoteConnection = sender()
remoteConnection ! Register(self,keepOpenOnPeerClosed=true)
//first thing to do is to register yourself with a lookup
mLookupManager ! AddMe(myAddress, this.context.self.path)

但是连接消息被接收了两次。服务器 actor 没有重新启动,因为我已经重载了 preRestart 并且它没有被调用。问题在于查找管理器进行查找,如果找到具有相同套接字地址的 actorpath,则向其发送毒丸。然后向其中添加新 Actor 。但是在这种情况下,它会杀死同一个 Actor 并添加它的 Actor 路径为什么我会收到两次连接消息?有什么线索吗?

最佳答案

Bind已成功完成(你得到了 Bound 返回)服务器 actor 它将得到一个 Connect与套接字建立的每个新连接的消息。

常见的模式是让 Connect消息触发创建一个新参与者,该参与者将负责与该特定客户端进行交互,而不是让“服务器”参与者进行交互。

请参阅此处的文档以获取执行此操作的示例:http://doc.akka.io/docs/akka/2.4.14/scala/io-tcp.html#Accepting_connections

关于scala - Akka TCP IO 向我发送两次连接消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41083719/

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