我有一个机器人,它分析聊天命令并提供一个小型数据库。当我告诉机器人它应该将数据库的内容写入irc时,它会因为过多的洪水而被踢。我怎么能阻止这个? (我使用的是freenode.net)
PS:这是我的代码:
for (User u : users.values()) {
ps.println("PRIVMSG " + CHANNEL + " :" + u.toString());
}
ps是一个写入Socket.getOutputStream()的PrintStream。 CHANNEL是我频道的名称。 users.size()是~60。
答案 0 :(得分:4)
显然,客户端无法更改服务器阈值以检测泛滥和断开连接的客户端。否则,整个洪水保护的想法都毫无意义。
所以,你必须将你的输出限制到这样一个水平,它不会触发洪水冲击。在ps.println
次呼叫之间添加(可配置)睡眠,并设置睡眠持续时间,以免被踢。
解决方法是使用类似pastebin的服务,只需将URL和摘要/标题文本一行发送到IRC即可。无论如何,使用这些服务是任何超过3行的任何IRC粘贴的标准程序。各种“pastebin”服务都有REST API(example),所以这应该是一种非常简单的方法。