Python asyncore 连接性

1 投票
2 回答
3277 浏览
提问于 2025-04-16 06:52

有没有办法检查在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。在这种情况下,是在从服务器接收到数据后,它会自己断开连接。

参考资料:

撰写回答