【问题标题】:Debugging Akka.NET remote connections (Cant connect - Failed to bind)调试 Akka.NET 远程连接(无法连接 - 绑定失败)
【发布时间】:2019-11-27 17:16:21
【问题描述】:

使用作为 Akka.NET 源代码的一部分提供的示例聊天服务器/客户端项目,我尝试对其进行修改,使其能够在我的网络上的两台计算机上成功运行。

我有两个系统通过这样的路由器连接

192.168.0.29 (Server) <---------------| Router |---------------> 192.168.0.52 (Client)

然后我有两个配置如下的参与者系统:

服务器:

akka {  
    actor {
        provider = remote #Specify remote provider
    }
    remote {

        dot-netty.tcp {
            port = 666 #Akka server port number
            hostname = 0.0.0.0 #Bind to all local network interfaces
            public-hostname = 192.168.0.29 #Expose public IP to enable correct routing of public messages.

        }
    }
}

客户:

akka {  
    actor {
        provider = remote
    }
    remote {
        dot-netty.tcp {
            port = 0 #Tell Akka that this is a client connection/use random port.
            hostname = 192.168.0.29 #Tell Akka.NET which remote instance to connect to
        }
    }
}

不幸的是,虽然我能够在本地成功连接到聊天服务器,但无论我如何配置 Hocon,我似乎都无法让远程实例绑定到位于机器 192.168.0.29 上的服务器 actor。

我收到的具体错误消息

[ERROR][27/11/2019 4:58:36 PM][Thread 0004][Akka.Remote.Transport.DotNetty.TcpTransport] Failed to bind to 192.168.0.29:0; shutting down DotNetty transport.
Cause: System.Net.Sockets.SocketException (10049): The requested address is not valid in its context
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)

此错误消息提示我没有可用的 Akka.NET 可以访问的套接字。

具有讽刺意味的是,前段时间 I asked a very similar question 当时帮助我解决了连接问题,但直到最近我才再次使用 Akka.NET。

我注意到两台机器的防火墙都关闭了,并且可以成功地相互 ping,我还尝试了各种设置组合。

Akka.NET 服务器/客户端应用程序的原始源代码位于here,我的当前版本为is here

谁能提供任何关于我可能做错了什么以及如何改进我对 Akka.NET 远程连接的调试的见解?例如,有没有一种方法可以验证服务器 192.168.0.29 上的 Actor 系统是否可以从外部 192.168.0.52 访问?

【问题讨论】:

    标签: c# akka.net akka-remote-actor akka.net-networking


    【解决方案1】:

    哈哈,在发布我的问题 5 分钟后,我终于能够确定解决方案(尽管它并不理想)。

    解决方案是意识到当您在客户端应用程序上实例化 ActorSystem 时,您实际上并没有将本地参与者系统连接到远程系统,而是创建了一个参与者系统的本地实例,该实例本身正在随机监听港口。

    远程连接本身在您创建ActorSelection() 引用时发生。

    所以我需要做的就是从

    更改我的客户端 hocon
    hostname = 192.168.0.29
    

    hostname = 192.168.0.52
    

    然而,这会产生一个最终(尽管相当小)的问题。我现在需要一个不同的 hocon 文件用于本地运行的实例和远程运行的实例。诚然,这可能可以通过代码来解决......

    我很乐意将可能能够提出解决此问题的建议的人标记为解决方案。

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2015-02-08
      • 2015-11-28
      • 2018-07-01
      相关资源
      最近更新 更多