栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得无阻塞套接字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最好的网络编程工具包。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号