在 Python 中使用 Twitch IRC 时“由对等方重置连接”

我尝试用 Python 编写自己的机器人,以通过其 IRC 界面连接 Twitch-chat 并与之交互。我有连接,可以接收和发送数据。我还用 PONG 回答传入的 PING(它们在大约 5 分钟后发送)。但是在大约 3 分钟不活动后(所以在我什至得到 PING 之前)连接失败了

socket.error: [Errno 104] Connection reset by peer

我使用socketPython 中的模块进行连接。recv()在我的套接字上调用该方法时会发生错误。


我能够弄清楚的一些事情:

  • 在连接失败之前,他们没有传入(未应答)PING。

  • 每次上次聊天消息和断开连接之间的时间都在 3 分钟左右。它足以接收一些东西(链接其他人的聊天消息)来重置这个计时器。我不需要自己发送任何东西。

  • 我首先想到的是我自己超时了,因为我很长时间没有收到任何东西。情况似乎并非如此,因为如果我为socket.recv()I receive设置了较低的超时时间socket.timeout: timed out,而不是上面显示的错误。

  • 我想我不会错过任何发送给我的数据,因为所有聊天消息都会通过。但是为了确定起见,我在下面发布了用于接收数据的主循环。


我现在的问题是,为什么连接失败,我该如何防止这种情况发生?

我感觉这是一个模糊的问题。这是我第一次尝试使用 IRC 界面,我不知道如何获得有关问题究竟是什么的更多信息。


以防万一,这是我用来接收数据的电源回路。我认为这很好用,因为所有聊天消息都通过了。但也许有一个错误,我错过了一些传入的数据(如 PING)。


readbuffer = ''

while True:

    readbuffer = readbuffer + s.recv(1024)

    temp = string.split(readbuffer, '\n')

    readbuffer = temp.pop()

    for line in temp:

        print(line)

        # PING/PONG

        if "PING :tmi.twitch.tv" in line:

            print("PONG :tmi.twitch.tv")

            s.send(line.replace('PING', 'PONG'))

这s是一个socket()表单socket模块。


慕码人8056858
浏览 171回答 1
1回答

森栏

每 2 分钟我自己 ping 服务器解决了这个问题。我刚刚添加了这个功能import time, threadingdef sendPing(s):    print('sending PING')    s.send("PING :tmi.twitch.tv")    threading.Timer(120, sendPing, [s]).start()sendPing(s)在主循环之前。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python