Python客户端套接字事件处理,如Adobe ActionScript中的那样

时间:2011-02-03 22:12:34

标签: python sockets asyncore

我正在将一些ActionScript代码移植到Python中,我正在努力处理某种类似于Flash中可用的事件调度程序实现(flash.events.EventDispatcher)。

我需要创建一个客户端套接字连接到服务器,该服务器将使用横幅进行响应。然后,客户端将发送一些信息,接收新的横幅等。

我知道如何创建客户端套接字,但问题是如何处理事件,以便客户端根据事件运行适当的函数。

我已经阅读了一些关于各种模块的内容,例如Asyncore和Twisted,老实说,我正在寻找一些快速且易于实现的东西。我需要将代码移植到最小的大小作为概念证明。

以下是使用asyncore的代码的一部分:

import socket
import asyncore

class Client(asyncore.dispatcher):

    def __init__(self, host, port):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect((host, port))

    def handle_connect(self):
        self.log('Socket connected')

    def handle_close(self):
        print "Socket disconnected"
        self.close()

    def handle_read(self):
        print 'Received: ', self.recv(1024)
        self.handle_close()

def connect(host, port)
    clientSocket = Client(host, port)
    asyncore.loop()

由于某种原因,代码会返回以下错误:

warning: unhandled write event
warning: unhandled write event
warning: unhandled write event
...

上面的代码实际上没有做任何有用的事情。我需要为IO错误添加事件处理程序以及处理来回发送的数据。但是,首先我需要整理出基础知识。

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试重写handle_write事件,如asyncore documentation中所述?

修改:或者,如果您想要取消警告而不是覆盖该事件,则可以使用-W command-line optionwarnings模块。