我有一个epoll服务器,有时会打开传出连接,使用其主机名表示。由于传入连接流量的速度很高,我不想阻止像getaddrinfo()
或gethostbyname()
之类的地方。当然,我可以实现一个缓存加一个新的线程,在那里执行主机名解析。是否有一种单线程非阻塞方式来将主机名解析为IP?C++异步主机名解析
0
A
回答
1
为此目的有多种库,例如, libevent
包含一个解析器。
虽然我在某种意义上认同@Puciek,但是在单线程中这样做会给可疑的好处带来相当大的复杂性。使用专用解析线程并通过管道与其通信可能是最佳解决方案。
既然你提到了epoll
我想你正在使用Linux。它有一个getaddrinfo_a
函数,如果我理解正确的话,为你做的一部分。它克隆一个线程并在那里运行getaddrinfo。我从来没有使用它,所以无法帮助。
+0
'libevent'如何实现异步名称解析? – pavelkolodin
+0
这是一个名为'evdns'的独立模块。注意:我还没有真正使用过那个。 –
相关问题
- 1. 如何将主机名异步解析为IP地址?
- 2. Windows主机名称解析
- 3. 无法解析主机名
- 4. WinSock2 getaddrinfo解析主机名
- 5. Graylog不解析主机名
- 6. 解析域名/主机名字符串
- 7. 用javascript进一步解析url主机名
- 8. 无法解析主机异常的Android
- 9. 非致命异常:的java.net.UnknownHostException无法解析主机“mysite.com”:没有与主机名
- 10. Objective-C异步XML解析器问题
- 11. C库包含异步DNS解析器
- 12. libcurl return“无法解析主机名”
- 13. Python解析主机名与IPv6地址
- 14. 蟒蛇:socket.gethostbyname无法解析主机名
- 15. 使用代理解析主机名
- 16. 将ip解析为主机名
- 17. “主机名无法解析”从“ftp”URL
- 18. Java无法解析主机名
- 19. 无法解析主机名,ping工程
- 20. curl_easy_perform:无法解析主机名
- 21. Kubernetes:Pod无法解析主机名
- 22. 我自己解析主机名
- 23. Mac SVN E175002:无法解析主机名''
- 24. 主机如何解析网络域名?
- 25. 解析主机名的ip地址
- 26. 使用t-sql解析主机名称
- 27. 树莓无法解析主机名
- 28. MySQL无法解析主机名
- 29. 将主机名解析为IP地址
单线程和非阻塞是(几乎)排除对方。如果您没有辅助线程来处理您的工作,您期望在等待数据时不会阻止该工作? –
@Puciek:我认为你排除错了,请参阅'epoll' – pavelkolodin
我几乎这么说,但这不是日常编程的可行解决方案。 IO等待的最简单方法是将你的应用程序线程化,如果你不想这么做的话 - 使它异步,这对于重新设计来说是一件非常痛苦的事情,但是,嘿,你不想要简单的方法! –