【问题标题】:Dealing with global bans for an IRC chat bot application处理 IRC 聊天机器人应用程序的全球禁令
【发布时间】:2013-02-02 10:54:36
【问题描述】:

我有一个使用 Node.js + JavaScript 为 TwitchTV 上的广播公司开发的 IRC 聊天机器人。我在家里的电脑上运行了这个,我知道 IRC 将在全球范围内禁止一个 IP 地址,如果它发送太多消息或泛滥。

我想向其他广播公司开放聊天机器人,但我担心如果不同的机器人我会被全球禁止(我设置了它,以便广播公司可以为他们的机器人创建一个新帐户,因此名称适合他们的频道)正在从单个全球 IP 发送消息。

我可以使用哪些技术让每个广播公司从机器人获取他们的消息而不会被全球禁止?

这是一个机器人示例,它可以同时进入多个频道、发送消息而不会被禁止:

http://www.twitch.tv/moobot

我问过创作者是否可以给我一些建议,但他们几乎都拒绝了。

【问题讨论】:

    标签: javascript node.js bots irc


    【解决方案1】:

    您应该知道一些限制并且可以/不应该超过:

    • 克隆每个 IP/子网
      大多数网络限制来自单个 IP 的并发连接数量(有时,尤其是 IPv6 甚至整个子网)。这个限制对于每个网络都是不同的,当超过这个限制时如何处理也是不同的。一些网络会创建一条 g-line(全球网络禁止您的 IP),而另一些网络则会丢弃任何新连接。

    • 频道限制每个连接
      您可以同时使用多少个频道是有限制的。此限制是针对每个连接的,因此添加其他连接会使您需要克隆的最大通道数倍增。

    • 速率限制每个连接 每个连接只允许在给定时间内向服务器发送一定数量的数据。这可以很简单,从 5 个命令/秒到复杂的,不同的命令会增加不同的阈值。


    那么你怎么能绕过这个限制呢?

    • 克隆
      最好的方法是获得例外,获得信任。如何获得,甚至能否获得取决于网络(政策)。

    • 频道限制
      网络中的一些服务器可能允许更多的频道进入。一些网络可以允许某些用户获得更高的限制。再次询问您的 IRCop 或使用克隆。

    • 速率限制
      询问您的 IRCop 或使用克隆。实现队列以避免Excess Flood 断开连接。

    总结一下:

    您不应该为每个频道使用一个连接。虽然这使您可以为每个频道选择不同的名称,但这在大多数网络上被认为是资源浪费。
    最好使用中性名称并将其用于多个频道。达到通道上限后,使用克隆。

    为避免因excess flood 而被踢出,请实施一个队列以阻止行数(您这边的速率限制)。

    连接到网络的并发连接数永远不要超过允许的数量。
    这包括“Ghosts”,即最近断开但仍“在服务器上”的连接。 (为了防止 g 线将限制除以 2 或等待 3 分钟(或更长时间)再重新连接)

    编辑

    在 twitch 上环顾四周后,看起来 twitch 没有使用 IRC 网络,而是使用了多个 IRC 服务器。这使它变得更简单和更复杂:

    • 您应该查找适当的 DNS 名称并尽可能使用现有连接(具有相同的 ip)。
    • 使用单个用户名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多