我正在研究一个IRC-bot作为一个小Python项目。机器人工作得很好,但很长时间都无法保持连接状态。过了一会儿,它只是将空行打印到终端,然后ping出(因为它无法处理来自服务器的PING)。
这段代码处理接收部分:
def listen(channel):
while True:
data = conn.recv(4096)
print data
if data != '':
if data.split()[0] == 'PING':
process the data
过了一会儿,机器人只是将白色线打印到终端,我不明白为什么。
完整代码可在Github上找到:https://github.com/Silox/Python-IRC-bot/blob/master/bot.py#L101
答案 0 :(得分:1)
答案 1 :(得分:1)
IRC消息是否始终适合/填充4K边界?如果没有,那么也许你错过了ping,因为它在两次调用recv()
之间分配。您需要收集从recv()
返回的数据,然后查找协议定义的消息边界。如果不这样做,那么当消息与您选择的4K缓冲区不对齐时,您将无法正确处理它们并可能错过消息。这可能是您首先失去连接的原因。 (我不知道IRC,但这是一般原则)