asyncore - Асинхронный обработчик сокетов

asyncore - модуль предназначенный для работы с неблокирующими сокетами.

Неблокирующие сокеты (nonblocking sockets) - это сокеты на время выполнения операции с которыми клиентская программа не блокируется, те например не ожидает завершения операции получения данных, а идет дальше. Вместо того чтобы вызывать обработку данных сразу после прослушивания сокета, вы делаете коллбэк который будет вызван когда сокет будет готов передать или принять данные.

Пример простой отправки стандартного GET запроса на получение страницы.

   1 import asyncore, socket
   2 
   3 class http_client(asyncore.dispatcher):
   4 
   5     def __init__(self, host, path):
   6         asyncore.dispatcher.__init__(self)
   7         self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
   8         self.connect( (host, 80) )
   9         self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path
  10         self.host = host
  11 
  12     def handle_connect(self):
  13         pass
  14 
  15     def handle_close(self):
  16         self.close()
  17 
  18     #автоматически вызывается когда в сокет приходят данные
  19     #тут мы выведем хост с откуда они идут, и сделаем стандартное чтение с сокета
  20     def handle_read(self):
  21         print self.host
  22         self.recv(8192)
  23         #print self.recv(8192)
  24 
  25     #этот метод сигнал о том что сокет готов записывать
  26     def writable(self):
  27         return (len(self.buffer) > 0)
  28 
  29     def handle_write(self):
  30         sent = self.send(self.buffer)
  31         self.buffer = self.buffer[sent:]
  32 
  33 c = http_client('www.mail.ru', '/')
  34 c = http_client('www.python.org', '/')
  35 
  36 #запускаем цикл опроса сокетов
  37 asyncore.loop()

Рузультат:

www.mail.ru
www.mail.ru
www.mail.ru
www.mail.ru
www.mail.ru
www.python.org
www.python.org
www.mail.ru
www.mail.ru
www.mail.ru

Пакеты/Network/asyncore (последним исправлял пользователь SOL-FTTB 2010-05-31 19:26:23)