質問

Asyncoreで接続が確立されていることを確認する方法はありますか?

asyncore.loop()が呼び出されたら、サーバー間の通信を外すにはどうすればよいですか?

単にclose()を呼び出すことはできますか?

役に立ちましたか?

解決

asyncore.loop()が呼び出されると、コントロールは実行されるイベントループに引き渡されます。

asyncore.loop()の後のコードは、イベントループがシャットダウンされた後にのみ呼び出されます。

イベントループは、さまざまなイベントに反応し、ハンドラーを呼び出します。 イベントループをシャットダウンするには、それが理にかなっているイベントハンドラーの1つで停止するために呼び出す必要があります。

例:次の例を見てください。

fromからのコード: http://www.mechancalcat.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は、イベントハンドラーの1つ-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