Обработка событий сокета клиента Python, подобная той, что есть в Adobe ActionScript - PullRequest
1 голос
/ 04 февраля 2011

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

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

Любая помощь очень ценится. Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2011

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

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

...