作者:TXCWB_523 | 2023-06-26 11:13
我正在设计一个新服务器,它需要支持数千个UDP连接(大约100,000个会话).有哪些输入或建议可供使用?
1> 小智..:
答案是epoll,如果你正在使用Linux,kqueue如果你使用的是FreeBSD或Mac OS X,而i/o完成端口,如果你在Windows上.
你(几乎肯定)要研究的一些额外的东西是:
负载均衡技术
多线程网络
数据库架构
完美的哈希表
此外,重要的是要注意UDP与TCP不具有"连接".调试基于网络的解决方案可能具有挑战性,因此从小规模和规模扩大开始也符合您的最佳利益.
谢谢你的回复.我知道没有这样的东西称为UDP连接,因为它是一个无连接的面向通信.我想到的应用程序是基于会话的,因此我将其作为连接而不是会话.我的错.此外,基于select with multithreaded application,我已经尝试了超过200,000个会话.只是想优化.我也不是建立可扩展架构解决方案的新手.负载平衡可能不适合我所看到的服务器类型.它绝对是一个多线程网络.很可能会使用某种生产者/消费者模式.
2> unixman83..:
CURL的作者写了一篇关于民意调查与选择vs事件库的精彩文章.
该指南根本没有帮助.它基本上假设每个人都知道三者之间的主要区别.
请至少提供一个摘要,而不仅仅是一个裸链接
3> Yann Ramin..:
Linux:epoll
FreeBSD:kqueue
Windows:??
有一些包装库,例如libevent和libev,它们可以为您抽象.
Windows:IO完成端口
顺便说一下.IOCP:Windows NT 3.5,1994; kqueue:BSD 4.1,2000; epoll:linux内核2.5.44,2002.
libev编写得很糟糕IMO,在我停止活动后为活动事件释放内存时崩溃了!设计不好.此外,它包含大多数代码的一个(3000行).c文件.
在libev上+1,它太棒了!
@ unixman83单个3000行.c文件听起来很神奇!