从 akka.net 远程检索动态分配的 tcp 端口

retrieve dynamically assigned tcp port from akka.net remote

我的工作是编写具有一些并发任务的分布式 client/server 应用程序。所以我决定使用 akka.net 来解决并发问题。为了实现服务器和客户端之间的 ipc,使用了 akka remote。由于某些原因,一台工作站上可能 运行 多个相同类型的客户端。所以我将这些客户端配置为动态分配 tcp 端口。这可以很好地向服务器发送消息。

我的问题是向客户推送一些信息。为了完成这个任务,客户端上存在一个参与者。现在服务器为这个参与者创建了一个引用。因此它需要客户端正在侦听的端口。我的想法是在某种连接过程中使用服务器上的参与者将客户端使用的 tcp 端口发送到服务器。

搜索了几个小时后,我没有找到任何提示在哪里可以找到动态分配的 TCP 端口。那么客户端如何获得分配的tcp端口呢?

好的,我可以使用 akka.cluster。但是我认为使用 akka.cluster 是在打破方向盘上的苍蝇。如果它解决了我的问题,我们将继续关注。

两个建议,假设是您的客户端首先与服务器联系。

  1. 我会让服务器跟踪连接了哪些客户端。我可能会有一条心跳消息,每隔几秒从每个客户端系统发送一次。这样您就可以为每个活动的客户端存储一个 IActorRef 并发送回消息而无需查找端口。 IActorRefs 在位置透明的情况下更可取。
  2. 如果您确实需要明确找到端口,您可以从客户端系统上其中一个参与者的 IActorRefPath 属性 中提取它.

感谢 patricks 的建议,我的问题已解决。

解决方案是在执行问候消息时从可用的发件人路径中提取所需的信息。使用此信息,服务器能够维护所有连接的客户端及其网络地址的列表。

非常感谢@patrick。

问候格雷戈尔