【发布时间】:2015-03-19 18:37:06
【问题描述】:
所以我一直在编写一个基于 java 的 irc-bot,它相当简单。与服务器建立套接字连接,将缓冲的读取器/写入器附加到套接字,然后使用这些缓冲区读取/写入。
除了打印出一个 json 对象并因过度泛滥而被踢出网络时,我没有遇到任何问题。我不确定网络的消息速率限制,但我确实通过相同的简单函数传递所有消息。
我希望为其添加某种 x 字节/时间范围限制。有人建议我研究 NIO,但这似乎有点过度设计了这个问题。
这是我当前的 write-to-irc 通道方法的样子:
public static void writeMsg(BufferedWriter writer, String Channel, String Message) {
try {
System.out.println("Bot Command: PRIVMSG " + Channel + Message); //diagnostic
writer.write("PRIVMSG " + Channel + Message);
writer.flush();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
可能传入/传出该函数的示例:
输入:
writer(我的 BufferedWriter 对象)、“#Testing1234:”、“!wiki China”;
输出:
PRIVMSG #BeginnersProgramming :http://en.wikipedia.org/wiki/China
【问题讨论】:
-
FWIW,大多数速率限制可能主要着眼于在一个时间范围内发送的消息量,而不是它们的长度。例如。假设您在 20 秒内发布 10 条 100 个字符的消息时超时,那么如果所有消息只有 1 个字符长,您也可能会超时。因此,根据消息长度分布,简单地检查一个时间范围内发送的字节数可能不足以逃避禁令;您应该(或另外)检查时间范围内发送的消息数量。
-
是的,我正在与管理员交谈,它是消息的数量(更容易实现)和它们的内容的长度。
-
你知道有一些用于 irc bot 的 API 吗?也许最好只实施,这取决于你想要什么。这是我前一段时间使用的一个:jibble.org/pircbot.php