gpt4 book ai didi

java - 避免 java 中的速率限制(IRC)

转载 作者:行者123 更新时间:2023-12-01 11:59:48 26 4
gpt4 key购买 nike

所以我一直在写一个基于java的irc-bot,它相当简单。与服务器建立套接字连接,将缓冲的读取器/写入器附加到套接字,然后使用这些缓冲区进行读取/写入。

除了当我打印 json 对象并因过多的洪水而被踢出网络时之外,我没有遇到任何问题。我不确定网络的消息速率限制,但我确实通过相同的简单函数传递所有消息。

我希望为其添加某种 x 字节/时间范围限制。有人建议我研究一下 NIO,但这似乎有点过度设计了这个问题。

这是我当前的 write-to-irc channel 方法:

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 (my BufferedWriter object), "#Testing1234: ", "!wiki China";

输出:

PRIVMSG #BeginnersProgramming :http://en.wikipedia.org/wiki/China

最佳答案

I'm hoping to add some kind of x bytes / timeframe limit to it

最简单的方法是沿着

final int rateLimit = 50; // Bytes per second

final float msPerByte = 1000.0f / rateLimit;

writer.write(message);

int numBytes = message.length();

Thread.sleep((int)(msPerByte * numBytes + 1));

但是,根据消息的长度,一条消息的单次突发可能已经触发服务器的速率限制。在这种情况下,您必须将消息分成更小的部分,并在适当的延迟之间逐个发送。

如果仅在每个时间帧的消息基础上强制执行速率限制,则您所需要做的就是在每条消息之后 sleep() 恒定的时间。

我相信有更复杂的算法在起作用,其中可能包括更多基于时间的参数来决定。

关于java - 避免 java 中的速率限制(IRC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com