質問
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
所属していません StackOverflow