Aar*_*ken 3 web-applications http long-polling
由于您使用的是事件循环而不是线程,因此实际服务器看起来如何?
我知道它使用事件循环,但是你如何分离请求?而且你如何防止你的服务器运行速度非常慢(因为它,我认为,因为它是无线的,所以一次只能推送一件事?)
某种伪代码会很棒.
原谅我的无知; 当然,如果某个地方用非基本的方式解释它"这样就足够了,直到你有1000名游客的方式",我很高兴知道它.
长轮询服务器的实现细节会因平台而异,因此您的假设可能不正确.
我使用.NET 为我们的网站实现了COMET服务器.我利用HttpListener来完成所有无聊的http内容和Microsoft CCR来处理所有异步IO.它使用一个线程池来处理请求,当它们进入时.它不是每个客户端的一个线程,但它不是单线程,通常需要几十个线程来保持流畅,因为用户数量增加.这种方法意味着我们可以轻松扩展到多个CPU内核.CCRs异步枚举器模式确实有助于保持异步逻辑的整洁,并且我可以在一年后相当容易地阅读代码.
事实证明,这种方法极具可扩展 我已经测试了多达20000个客户端,于是我们受到网络IO的约束.它处理所有客户端("永久"连接,每30秒重新连接一次),服务器负载为1-2%.绝对值得重新考虑您的假设,即您必须选择事件循环架构而不是多线程.中间层对我来说非常好用,用于处理IO绑定任务的.NET异步编程模型实际上使您不再需要微管理线程.实际上,当有要处理的IO数据时,从池中借用一个线程来执行该处理,然后返回到池中,准备为另一个请求提供服务.所有复杂的IOCP内容都被抽象掉了.