我有一個epoll服務器,有時會打開傳出連接,使用其主機名錶示。由於傳入連接流量的速度很高,我不想阻止像getaddrinfo()
或gethostbyname()
之類的地方。當然,我可以實現一個緩存加一個新的線程,在那裏執行主機名解析。是否有一種單線程非阻塞方式來將主機名解析爲IP?C++異步主機名解析
0
A
回答
1
爲此目的有多種庫,例如, libevent
包含一個解析器。
雖然我在某種意義上認同@Puciek,但是在單線程中這樣做會給可疑的好處帶來相當大的複雜性。使用專用解析線程並通過管道與其通信可能是最佳解決方案。
既然你提到了epoll
我想你正在使用Linux。它有一個getaddrinfo_a
函數,如果我理解正確的話,爲你做的一部分。它克隆一個線程並在那裏運行getaddrinfo。我從來沒有使用它,所以無法幫助。
+0
'libevent'如何實現異步名稱解析? – pavelkolodin
+0
這是一個名爲'evdns'的獨立模塊。注意:我還沒有真正使用過那個。 –
相關問題
- 1. 如何將主機名異步解析爲IP地址?
- 2. Graylog不解析主機名
- 3. 無法解析主機名
- 4. Windows主機名稱解析
- 5. WinSock2 getaddrinfo解析主機名
- 6. 解析域名/主機名字符串
- 7. 用javascript進一步解析url主機名
- 8. 無法解析主機異常的Android
- 9. 非致命異常:的java.net.UnknownHostException無法解析主機「mysite.com」:沒有與主機名
- 10. C庫包含異步DNS解析器
- 11. Objective-C異步XML解析器問題
- 12. 非阻塞主機名解析?
- 13. IP如何解析主機名?
- 14. 從Bonjour網絡中解析主機名
- 15. Mac SVN E175002:無法解析主機名''
- 16. Zookeeper:主機名解析失敗
- 17. libcurl return「無法解析主機名」
- 18. curl_easy_perform:無法解析主機名
- 19. 使用t-sql解析主機名稱
- 20. 解析主機名的ip地址
- 21. Kubernetes:Pod無法解析主機名
- 22. Python解析主機名與IPv6地址
- 23. 我自己解析主機名
- 24. Kaa主機名解析失敗
- 25. 將ip解析爲主機名
- 26. 使用代理解析主機名
- 27. 無法解析主機名,ping工程
- 28. git - 無法解析主機名稱
- 29. Java無法解析主機名
單線程和非阻塞是(幾乎)排除對方。如果您沒有輔助線程來處理您的工作,您期望在等待數據時不會阻止該工作? –
@Puciek:我認爲你排除錯了,請參閱'epoll' – pavelkolodin
我幾乎這麼說,但這不是日常編程的可行解決方案。 IO等待的最簡單方法是將你的應用程序線程化,如果你不想這麼做的話 - 使它異步,這對於重新設計來說是一件非常痛苦的事情,但是,嘿,你不想要簡單的方法! –