gpt4 book ai didi

http - (全功能)长轮询服务器如何抽象地工作

转载 作者:可可西里 更新时间:2023-11-01 16:08:43 26 4
gpt4 key购买 nike

由于您使用的是事件循环而不是线程,实际的服务器看起来如何?

我知道它使用事件循环,但如何分离请求?以及如何防止您的服务器运行得非常慢(因为它是无线程的,所以我认为它一次只能推送一件事?)

某种伪代码会很棒。

原谅我的无知;当然,如果有什么地方用非基本的方式解释它“这已经足够好了,直到你有 1000 名访客”,我会很高兴知道。

最佳答案

长轮询服务器的实现细节因平台而异,您的假设可能不正确。

我为 our website 实现了一个 COMET 服务器使用.NET。我利用了 HttpListener做所有无聊的 http 事情和 Microsoft CCR处理所有的异步IO。它使用一个线程池在请求传入时为请求提供服务。它不是每个客户端一个线程,但它也不是单线程的,通常需要几十个线程才能随着用户数量的增加而保持流畅。这种方法意味着我们可以轻松地跨多个 CPU 内核进行扩展。 CCR 的异步枚举器模式确实有助于保持异步逻辑整洁,一年后我可以相当轻松地阅读代码。

事实证明,这种方法具有极强的可扩展性。我已经测试了多达 20000 个客户端,因此我们受到网络 IO 的约束。它处理我们所有的客户端(“永久”连接,每 30 秒重新连接一次)在 1-2% 服务器负载下滴答作响。绝对值得重新考虑您必须选择事件循环架构而不是多线程的假设。中间立场对我来说非常好,.NET asynchronous programming model用于处理 IO 绑定(bind)任务确实使您无需微观管理线程。实际上,当有 IO 数据要处理时,会从池中借用一个线程来执行该处理,然后返回到池中准备好为另一个请求提供服务。 All the complicated IOCP stuff被抽象掉了。

关于http - (全功能)长轮询服务器如何抽象地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com