【问题标题】:Python IRC Bot Timing Out After 240 SecondsPython IRC 机器人在 240 秒后超时
【发布时间】:2012-06-07 17:46:07
【问题描述】:

我正在尝试制作一个 IRC 机器人,但它在 240 秒后一直超时。我该如何解决这个问题?

import socket 
host = 'test'
port = 6667
channel = '#test'
nick = "test"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send('NICK ' + str(nick) +  ' \n\r') 
s.send('USER v v v :v Script' + '\r\n')
s.send('JOIN '+channel+' \n\r')

while True:
    command = s.recv(4096)
    print command

【问题讨论】:

  • IRC 服务器可能对你生气了。您正在从他们的服务器不停地阅读。
  • 你可能想试试 irclib。它处理 IRC 的所有框架(包括 ping)。 python-irclib.sourceforge.net 它甚至提供了一个 IRC Bot 示例。
  • @Blender:这不是套接字的工作方式——recv 调用只是客户端,如果没有准备好接收的数据,则程序会停止。

标签: python sockets irc bots


【解决方案1】:

您没有回复来自服务器的 ping 请求。

当您长时间空闲时,服务器认为连接已死,并发送ping请求,您需要回复pong(以及ping后服务器发送给您的任何内容)。所以如果服务器发给你这个,那应该是你的回复:

PING :HELLO_WORLD
PONG :HELLO_WORLD

否则,服务器将确认链接已失效并终止连接。

【讨论】:

    【解决方案2】:

    您可以尝试使用 irclib,但很可能是您没有回复服务器的 PING 消息。

    当收到的消息以“PING”开头时,您必须使用包含单词 PONG 和您的程序名称(以及可选的主机)的“PONG”消息来回复它 - 在“PONG”之后留一个空格。

    检查 PING 和 PONG 消息的完整 IRC 规范,并查看您的实验中可能缺少的其他内容:http://www.irchelp.org/irchelp/rfc/rfc.html

    【讨论】:

    • 我正在回复 ping,但服务器通常没有发送任何信息。如果我弄明白了,我会发布我自己的答案。
    【解决方案3】:

    我的问题是我什至没有可靠地从 IRC 服务器接收 PING 数据包。我通过在套接字级别添加keepalive来修复它:

        # enable keepalives at the socket (SOL_SOCKET) level
        self.client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
        # after 1 second of TCP inactivity, trigger keepalive pings
        self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)
        # send a keepalive ping every 60 seconds
        self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60)
        # quit after 5 consecutive failures
        self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5)
    

    再加上为每个 PING 发回一个 PONG,我的连接打开时间更长。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2015-11-21
      • 2015-01-21
      • 2011-08-02
      相关资源
      最近更新 更多