Networking 如何确保IRC中的最短路径?

Networking 如何确保IRC中的最短路径?,networking,irc,path-finding,Networking,Irc,Path Finding,关于一对一的交流,如下所述: 一对一的通信通常由客户端执行, 因为大多数服务器流量不是服务器通话的结果 只对彼此。为客户提供相互交谈的方式 另外,要求所有服务器都能在 沿着生成树的一个方向,以达到任何 客户因此,正在传递的消息的路径是最短的 生成树上任意两点之间的路径。 (我的重点。) “一个方向”是什么意思?只给一个客户?这如何“到达任何客户端”并找到“任意两点[IRC网络上的主机]之间的最短路径”? 为什么不干脆省掉垃圾,存储客户端的IP地址,让IP完成它的工作呢?毕竟,IRC是建立在TCP

关于一对一的交流,如下所述:

一对一的通信通常由客户端执行,
因为大多数服务器流量不是服务器通话的结果
只对彼此。为客户提供相互交谈的方式
另外,要求所有服务器都能在
沿着生成树的一个方向,以达到任何
客户因此,正在传递的消息的路径是最短的
生成树上任意两点之间的路径。

(我的重点。)

“一个方向”是什么意思?只给一个客户?这如何“到达任何客户端”并找到“任意两点[IRC网络上的主机]之间的最短路径”?

为什么不干脆省掉垃圾,存储客户端的IP地址,让IP完成它的工作呢?毕竟,IRC是建立在TCP/IP之上的,每个IRC服务器都连接到同一网络中的一个或多个服务器。客户端连接到其中一个服务器。假设我们有以下设置:

A / \ B C / / \ D E F A. / \ B C / / \ D E F 假设服务器a上的客户机想要向服务器E上的用户发送消息。在这种情况下,服务器A只向服务器C发送一条消息,后者将此消息发送到服务器E,而不是F

如果a上的客户端向服务器BE上有用户的频道发送消息,则a将向服务器BC发送消息B将向该频道中连接到B的用户发送消息,C将消息发送到服务器E,服务器将消息发送到该频道中的客户端


服务器DF将永远看不到该消息,因为该通道中没有人连接到它们,但是C即使该通道中没有人连接到C,也会看到消息,因为它必须依赖消息连接到E

每个IRC服务器都连接到同一网络中的一个或多个服务器。客户端连接到其中一个服务器。假设我们有以下设置:

A / \ B C / / \ D E F A. / \ B C / / \ D E F 假设服务器a上的客户机想要向服务器E上的用户发送消息。在这种情况下,服务器A只向服务器C发送一条消息,后者将此消息发送到服务器E,而不是F

如果a上的客户端向服务器BE上有用户的频道发送消息,则a将向服务器BC发送消息B将向该频道中连接到B的用户发送消息,C将消息发送到服务器E,服务器将消息发送到该频道中的客户端


服务器DF将永远看不到该消息,因为该通道中没有人连接到它们,但是C将看到消息,即使该频道中没有人连接到C,因为它必须依赖消息到E

Johannes暗示了解决方案,但没有完全回答您的问题。然而,他是正确的,因为图论是答案的很大一部分

由于服务器中的每个子节点映射和只有一个父节点,因此最短路径是图上两个服务器之间的唯一路径;如果没有回溯,同一个vertice不能访问两次。这称为生成树,其中所有节点都是连接的,但不存在循环

IRC不一定像TCP/IP。它通过广播与不同服务器上的多个客户端进行通信。需要注意的重要一点是,客户机在“coding”上向所有人发送“hi”,消息从客户机传输到连接的服务器。该服务器将消息传递给任何连接的服务器,这些服务器将消息传递给订阅了#编码的任何客户端,然后再传递给任何连接的服务器

没有什么真正像“客户对客户”的交流;一对一是通过向具有指定名称的用户发送消息来实现的;不是ip地址。NickServs有助于防止人们盗取姓名,并临时将昵称与IP关联,拒绝验证其他IP地址,并在验证过期时使用密码保护昵称

与发送通道消息的方式大致相同,用户向服务器发送消息“向@nicky发送“hi”,服务器只需传递此消息,直到客户端@nicky被列为连接到接收消息的服务器的客户端。机器人为@nicky离线时接收消息提供了一种方式;他们用用户名登录。 编辑:IRC实际上为客户端通信打开了一个仅限邀请的个人频道

从本质上讲,最短路径保证是IRCs广播策略的结果;消息在所需用户的服务器附近传播时,会转发给所需用户。如果服务器图中存在循环,时间戳可能会阻止回显消息

在架构部分,我们发现证据表明“生成树”的使用是正确的。服务器相互了解,以防止循环(保证最短路径)并高效连接:

6.1可扩展性

人们普遍认为,该协议不具有可扩展性 在大型竞技场中使用时足够好。主要问题来了 根据a的要求