如何获得无阻塞套接字connect()?

如何获得无阻塞套接字connect()?,第1张

如何获得无阻塞套接字connect()?

您还需要并行化连接,因为设置超时时套接字会阻塞。或者,您无法设置超时,而是使用选择模块。

您可以使用asyncore模块中的dispatcher类进行此 *** 作。看一下基本的HTTP客户端示例。该类的多个实例在连接时不会互相阻塞。您可以使用线程轻松地做到这一点,而且我认为使跟踪套接字超时变得更容易,但是由于您已经在使用异步方法,因此您最好还是走在同一个轨道上。

例如,以下内容适用于我的所有Linux系统

import asyncore, socketclass client(asyncore.dispatcher):    def __init__(self, host):        self.host = host        asyncore.dispatcher.__init__(self)        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)        self.connect((host, 22))    def handle_connect(self):        print 'Connected to', self.host    def handle_close(self):        self.close()    def handle_write(self):        self.send('')    def handle_read(self):        print ' ', self.recv(1024)clients = []for i in range(50, 100):    clients.append(client('cluster%d' % i))asyncore.loop()

在cluster50-cluster100中,有许多机器无响应或不存在。这将立即开始打印:

Connected to cluster50  SSH-2.0-OpenSSH_4.3Connected to cluster51  SSH-2.0-OpenSSH_4.3Connected to cluster52  SSH-2.0-OpenSSH_4.3Connected to cluster60  SSH-2.0-OpenSSH_4.3Connected to cluster61  SSH-2.0-OpenSSH_4.3...

但是,这没有考虑必须阻塞的getaddrinfo。如果您在解决dns查询时遇到问题,则必须等待一切。您可能需要自己收集DNS查询,并在异步循环中使用IP地址

如果您想要比异步异步开发工具更大的工具包,请查看Twisted
Matrix
。入门有些繁琐,但这是您可以获得的python最好的网络编程工具包。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存