Python асинхронное подключение
Есть ли способ проверить, установлено ли соединение в asyncore?
как только asyncore.loop() вызывается, как я могу отключить связь между сервером?
я могу просто позвонить close()?
2 ответа
После вызова asyncore.loop() элемент управления передается в цикл обработки событий.
Любой код после asyncore.loop() будет вызываться только после завершения цикла обработки событий.
Цикл событий будет реагировать на различные события и обработчики вызовов. Чтобы завершить цикл обработки событий, вы должны вызвать stop в одном из обработчиков событий, где это имеет смысл.
Например: взгляните на следующий пример.
Код от: http://www.mechanicalcat.net/richard/log/Python/A_simple_asyncore__echo_server__example
import asyncore, socket
class Client(asyncore.dispatcher_with_send):
def __init__(self, host, port, message):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host, port))
self.out_buffer = message
def handle_close(self):
self.close()
def handle_read(self):
print 'Received', self.recv(1024)
self.close()
c = Client('', 5007, 'Hello, world')
asyncore.loop()
self.close вызывается внутри одного из обработчиков событий - handle_read. В этом случае после того, как данные были получены с сервера. он отключается сам.
Рекомендации:
Есть ли способ проверить, установлено ли соединение в asyncore?
Используя с сокетами, вы можете перегрузить метод handle_connect () asyncore.dispatcher для запуска, когда сокет подключен:
import asyncore
class MyClientConnection(asyncore.dispatcher):
def handle_connect(self):
'''Socket is connected'''
print "Connection is established"
Если вы предпочитаете опрос, прочитайте переменную, связанную в вашем asyncore.dispatcher:
myclient = MyClientConnection()
isConnected = myClient.connected