Обработка событий клиентского сокета Python, как в Adobe ActionScript

Я портирую некоторый код 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
...

Приведенный выше код пока не делает ничего полезного. Мне нужно добавить обработчики событий для ошибок ввода-вывода и для обработки данных, отправляемых туда и обратно. Однако сначала мне нужно разобраться с основами.

Любая помощь приветствуется. Спасибо.


person joshu    schedule 03.02.2011    source источник
comment
Я предлагаю использовать Twisted, он предоставляет много клея для асинхронных сетевых сервисов: twistedmatrix.com/documents   -  person Spike Gronim    schedule 04.02.2011


Ответы (1)


Вы пытались переопределить событие handle_write, как описано в документации по asyncore?

Изменить: в качестве альтернативы вы можете использовать -W параметр командной строки или модуль warnings, если вы хотите подавить предупреждение, а не переопределить событие.

person Velociraptors    schedule 03.02.2011
comment
Я добавил функцию handle_write по мере того, как вы связали ее, но handle_connect по-прежнему не запускается. Я пытаюсь понять это уже несколько часов. Может, мне стоит взглянуть на Twisted и на то, как быстро я смогу использовать это вместо этого. - person joshu; 04.02.2011