Вопрос

Есть ли способ проверить соединение на Asyncore?

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

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

Это было полезно?

Решение

Как только asyncore.loop () вызывается, контроль передан на цикл события, которая работает.

Любой код после asyncore.loop () будет вызываться только после того, как контур событий был выключен.

Контур событий будет реагировать на различные события и обработчики вызовов. Чтобы выключить контур события, вы должны позвонить, чтобы остановиться в одном из обработчика событий, где это имеет смысл.

Для бывшего примера посмотрите на следующий пример.

Код из: 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top