选择vs民意调查与epoll

rav*_*avi 64 sockets linux epoll posix-select

我正在设计一个新服务器,它需要支持数千个UDP连接(大约100,000个会话).有哪些输入或建议可供使用?

小智 44

答案是epoll,如果你正在使用Linux,kqueue如果你使用的是FreeBSD或Mac OS X,而i/o完成端口,如果你在Windows上.

你(几乎肯定)要研究的一些额外的东西是:

  • 负载均衡技术
  • 多线程网络
  • 数据库架构
  • 完美的哈希表

此外,重要的是要注意UDP与TCP不具有"连接".调试基于网络的解决方案可能具有挑战性,因此从小规模和规模扩大开始也符合您的最佳利益.

  • 谢谢你的回复.我知道没有这样的东西称为UDP连接,因为它是一个无连接的面向通信.我想到的应用程序是基于会话的,因此我将其作为连接而不是会话.我的错.此外,基于select with multithreaded application,我已经尝试了超过200,000个会话.只是想优化.我也不是建立可扩展架构解决方案的新手.负载平衡可能不适合我所看到的服务器类型.它绝对是一个多线程网络.很可能会使用某种生产者/消费者模式. (5认同)

uni*_*n83 40

CURL的作者写了一篇关于民意调查与选择vs事件库的精彩文章.

  • 该指南根本没有帮助.它基本上假设每个人都知道三者之间的主要区别. (5认同)
  • 请至少提供一个摘要,而不仅仅是一个裸链接 (5认同)

Yan*_*min 18

Linux:epoll FreeBSD:kqueue Windows:??

有一些包装库,例如libevent和libev,它们可以为您抽象.

  • Windows:IO完成端口 (14认同)
  • 顺便说一下.IOCP:Windows NT 3.5,1994; kqueue:BSD 4.1,2000; epoll:linux内核2.5.44,2002. (6认同)
  • libev编写得很糟糕IMO,在我停止活动后为活动事件释放内存时崩溃了!设计不好.此外,它包含大多数代码的一个(3000行).c文件. (6认同)
  • 在libev上+1,它太棒了! (4认同)
  • @ unixman83单个3000行.c文件听起来很神奇! (2认同)