0
Я пытаюсь реализовать как асинхронную модель TCP Client-Server в python. Это мой первый пример использования асинхронного модуля, и мне нужно объяснение, если кто-нибудь может предоставить мне.Пример клиента python asyncore
У меня есть следующие требования: [Client]
- Инициировать экземпляр клиента - соединиться с сервером, если сервер работает еще ждать сервер придумать.
- Мне нужно получить/передать данные с сервера.
- Уведомить меня, когда данные получены в гнезде.
Я попытался запустить пример пример из сети, но были некоторые сомнения:
import asyncore
import logging
import socket
from cStringIO import StringIO
import urlparse
class Client(asyncore.dispatcher):
def __init__(self,host):
self.logger = logging.getLogger()
self.write_buffer = ""
self.read_buffer = StringIO()
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
address = (host, 80)
self.logger.debug('connecting to %s', address)
self.connect(address)
def handle_connect(self):
self.logger.debug('handle_connect()')
def handle_close(self):
self.logger.debug('handle_close()')
self.close()
def writable(self):
is_writable = (len(self.write_buffer) > 0)
if is_writable:
self.logger.debug('writable() -> %s', is_writable)
return is_writable
def readable(self):
self.logger.debug('readable() -> True')
return True
def handle_write(self):
sent = self.send(self.write_buffer)
self.logger.debug('handle_write() -> "%s"', self.write_buffer[:sent])
self.write_buffer = self.write_buffer[sent:]
def handle_read(self):
data = self.recv(8192)
self.logger.debug('handle_read() -> %d bytes', len(data))
self.read_buffer.write(data)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG,
format='%(name)s: %(message)s',
)
clients = Client("127.0.0.1")
logging.debug('LOOP STARTING')
asyncore.loop()
logging.debug('LOOP DONE')
- Как диспетчеру класс уведомляет, когда данные доступны для чтения из гнезда. Является ли handle_read в этом сценарии?
- Является ли это занятым механизмом опроса? будет ли он потреблять весь мой процессор, даже если разъем сидит без дела?
- Вышеприведенный пример не дождался появления сервера. Как это можно сделать?
- Как записать данные в сокет от клиента?