gpt4 book ai didi

sockets - 如何设计多节点应用网络层?

转载 作者:行者123 更新时间:2023-12-03 12:02:44 26 4
gpt4 key购买 nike

我需要实现一个基于 PaxosLease 的选校库。并遇到网络层设计问题。

网络核心要求如下:

  • 每个节点既是服务器又是客户端
  • 系统可以在没有部分节点在线的情况下工作

  • 根据上述要求,我将网络层设计如下:
  • 使用 TCP 传输 msg。
  • 每个节点在命名端口上监听以接受连接(称为 ReadSession),这些连接只会读取 msg。
  • 通过匿名端口(称为WriteSession)连接到其他节点,这些连接只会写入msg。

  • 设计可能看起来不错。因为一开始有些节点可以离线,所以出现问题:ReadSession可以通过新的在线节点连接到节点来创建,如何创建WriteSession到新的在线节点?我们无法知道离线节点何时上线,我们只能通过接受来自新在线节点的新连接而不是其监听端口来知道其匿名端口。

    这对我来说真的是一个设计问题。我目前有这两个想法:
  • 尝试使用UDP传输msg
  • 注册 async_connect再次在 Asio::ip::tcp::socket::async_connect当抛出异常(意味着连接失败)。但是这个想法仍然存在问题:
  • asio::io_contextasync_connect 上花费大量 IO 资源的处理程序。
  • 由于异步操作,当我们需要写入 msg 时,我们无法立即准备好 WriteSession。

  • 所以,我想要一个可以在新的在线节点连接到当前节点时立即准备好 WriteSession 的设计。

    非常感谢你!

    最佳答案

    实际上,您创建的网络拓扑是一个分布式系统。而且你所面临的问题已经被zookeeper、chubby等很多著名的应用解决了。

    如果你不想这么复杂,也许你可以尝试在局域网中使用一些广播协议(protocol),如 LSD,或者在 WLAN 中使用 DHT。

    关于sockets - 如何设计多节点应用网络层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61788475/

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