0
我正在使用IRCLib for Java創建一個IRC bot。它使用Moepii作爲圖書館提供的客戶端。 Moepii的問題是它沒有建立防洪體系,所以我需要實施這個我的自我。目前,我的機器人在響應大量命令時觸發Quakesnet超額洪水並獲得引導。IRCLib Java創建的IRC Bot問題
有沒有人對我如何實施防洪有任何建議?我得到的一個想法是假設一個1024字節的緩衝區,一旦達到,就向服務器發送一個Ping並等待響應,然後繼續。我從來沒有與IRC合作過,所以我希望有一些指針。
當前實現
private class FloodMonitor implements Runnable {
private final int MAXBYTES = 512;
private int messageBuffer = 0;
private boolean suspend = false;
private boolean stop = false;
@Override
public void run() {
while (!stop) {
while (!suspend) {
MessageStructure message = out.peek();
if (message != null) {
messageBuffer += message.msg.getBytes().length;
if (messageBuffer < MAXBYTES) {
out.poll().sendMessage();
} else {
suspend();
message.bot.send("ping irc.quakenet.org");
}
}
}
}
}
public void resetBuffer() {
messageBuffer = 0;
suspend = false;
}
public void stop() {
stop = true;
}
public void suspend() {
suspend = true;
}
}
private class MessageStructure {
public String target;
public String msg;
public BotConnection bot;
MessageStructure(String target, String msg, BotConnection bot) {
this.target = target;
this.msg = msg;
this.bot = bot;
}
private void sendMessage() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
bot.doPrivmsgApproved(target, msg);
}
});
}
}
聽起來像一個堅實的計劃給我。試試看看是否適合你。 –
問題我有,但我會得到每個消息在隊列中的字節大小,直到(additiveSize +新消息大小> 1024)發送一個ping,等待響應,然後發送被擱置的消息? – meriley
當然,如果服務器沒有被你「淹沒」,你會立即得到一個PONG,然後你可以重置緩衝區,然後繼續回覆。確保不接受任何進一步的命令(等待ping時),以防止洪水攻擊。 –