【问题标题】:retrieve dynamically assigned tcp port from akka.net remote从 akka.net 远程检索动态分配的 tcp 端口
【发布时间】:2016-01-12 11:52:30
【问题描述】:

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

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

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

好的,我可以使用 akka.cluster。但我认为,使用 akka.cluster 会打破车轮上的苍蝇。如果它解决了我的问题,还有待观察。

【问题讨论】:

    标签: tcp port akka.net


    【解决方案1】:

    两个建议,假设是您的客户端与服务器进行了第一次联系。

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

    【讨论】:

    • 你的假设是正确的。客户端向指定的服务器参与者发送 hello 消息。
    • 好的,所以如果使用Sender 属性将IActorRef 获取到客户端,并跟踪连接了哪些客户端,希望您根本不需要找到端口。
    • 对不起,花了很长时间来编辑...您的假设是正确的。客户端向指定的服务器参与者发送 hello 消息。在服务器上执行参与者时,如何为客户端获取 IActorRef?这是否由发送者在执行演员时可用?发送 hartbeat 的演员是否必须处理推送的信息?
    【解决方案2】:

    感谢 patricks 的建议,我的问题得到了解决。

    解决方案是在执行 hello 消息时从可用的发送者路径中提取所需的信息。有了这些信息,服务器就能够维护所有连接的客户端及其网络地址的列表。

    非常感谢@patrick。

    问候格雷戈尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-18
      • 2010-09-12
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多