Python asyncore 连接性
有没有办法检查在asyncore中连接是否已经建立?
一旦调用了asyncore.loop(),我该如何断开与服务器的通信?
我可以直接调用close()吗?
2 个回答
0
有没有办法检查在asyncore中连接是否已经建立?
在使用套接字时,你可以重写handle_connect()这个方法,让它在套接字连接成功时运行:
import asyncore
class MyClientConnection(asyncore.dispatcher):
def handle_connect(self):
'''Socket is connected'''
print "Connection is established"
如果你更喜欢轮询的方式,可以查看你的asyncore.dispatcher中的connected变量:
myclient = MyClientConnection()
isConnected = myClient.connected
2
一旦调用了 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()
在一个事件处理函数 handle_read 中调用了 self.close。在这种情况下,是在从服务器接收到数据后,它会自己断开连接。
参考资料: