首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用gethostbyname让stream_socket_client更快?

使用gethostbyname让stream_socket_client更快?
EN

Stack Overflow用户
提问于 2011-04-19 19:09:58
回答 2查看 1.2K关注 0票数 2

我们通过stream_socket_client向不同的网站开放了大约100个连接。

有时这需要一段时间,我的假设是因为IP地址解析(例如,最多40秒,然后重复尝试4-5秒)。

我知道我们也可以在软件中缓存IP地址(使用gethostbyname获取它们),但问题是一些站点在共享IP上,一些站点使用子域(与主域相同的IP)。因此,如果我们仅使用IP,则请求将始终转到同一位置,而不是该IP上的不同站点。

有没有一个变通的方法,这样我们就可以提高速度,并针对我们想要的网站?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-19 19:32:01

DNS缓存是一个很好的想法,但我建议在您的应用程序之外使用它;我已经使用PowerDNS recursor多年了,效果非常好,它是很好的可靠代码。(通过学习丹·伯恩斯坦的DNS递归软件,PDNS避免了一些困扰BIND的头条新闻安全缺陷。)

通过在应用程序外部进行缓存,您可以完全避免在请求中尝试将IP与正确的DNS头匹配的问题,并且您可以完全访问Host:的内置缓存智能。(PDNS将尊重结果的生存时间,这需要您的团队努力才能正确地重新实现。)

但我假设很大一部分问题是,DNS请求可能是在前一个请求返回之后,在您的应用程序中按顺序发出的。如果你打算整天使用相同的100个名字,那么单独使用PDNS-recursor可能就足够了。

如果每个请求的100个名称没有太多重叠,那么您可能需要并行化应用程序发出的DNS请求,以便可以同时有100个未完成的DNS请求,而不是同时只有一个未完成的请求。一种“廉价”的方法是将所有请求传递给外部程序,该程序启动几十个线程,并对所有名称发出请求。(然后把它们扔到地板上。依靠PDNS-recursor将它们全部缓存。)更多的工作是直接在PHP程序中创建几十个线程或进程来执行所有查找。这将允许您直接使用答案,或者再次,在旧的顺序代码执行查找之前预先填充PDNS-递归缓存。

最重要的工作是完全转移到异步DNS请求上,如libadns库所提供的。如果100个名称查找的不同突发之间没有重叠,这将提供最大的好处。

票数 3
EN

Stack Overflow用户

发布于 2011-04-19 19:24:25

如果您在hosts文件中输入主机名和ip地址(在*nix计算机上为/etc/hosts,在Windows计算机上为%SystemRoot%\system32\drivers\etc\hosts ),则可以轻松地加快解析速度。

您可能必须在/etc/host.conf中更改配置(我不知道在哪里更改),因为在默认情况下,第一次尝试是询问指定的,然后检查/etc/hosts文件。

要确保在您的系统中实现的gethostbyname函数是如何工作的,请尝试查找正确的手册页(即http://linux.die.net/man/3/gethostbyname)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5715424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档