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
Другие вопросы по тегам