Python асинхронное подключение - PullRequest
1 голос
/ 11 ноября 2010

есть ли способ проверить, установлено ли соединение в asyncore?

после вызова asyncore.loop (), как я могу отключить связь между сервером?

могу ли я просто позвонитьблизко()?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

После вызова 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. В этом случае после того, как данные были получены с сервера. он отключается сам.

Ссылки:

0 голосов
/ 30 ноября 2012

есть ли способ проверить, установлено ли соединение в asyncore?

Используя с сокетами, вы можете перегрузить handle_connect () метод asyncore.dispatcher для запуска при подключенном сокете:

import asyncore

class MyClientConnection(asyncore.dispatcher):
    def handle_connect(self):
        '''Socket is connected'''
        print "Connection is established"

Если вы предпочитаете опросить, прочитайте переменную connected в вашем asyncore.dispatcher:

myclient = MyClientConnection()
isConnected = myClient.connected
...