Web 服务器缓冲区
Web servers buffer
我正在研究C/C++套接字的网络。例如,我现在使用Firefox,我可以加载10KB页面和30MB页面。所以我假设我从Web服务器获得的所有数据都写入了某个缓冲区。但该缓冲区是固定大小还是基于内容大小?
数据实际上是从一个缓冲区流向另一个缓冲区,最终在内存中结束。服务器通过磁盘缓冲区从磁盘读取,并写入 TCP 网络缓冲区,其内核将其清空到网络接口缓冲区中。数据在通过各种网络链路时通过网络从一个缓冲区传输到另一个缓冲区。最终,它会在操作系统的TCP连接缓冲区中结束,您的浏览器会不断将其清空到主内存中的缓冲区中。这些缓冲区都有各种不同的大小,有些是固定的,有些是可变的。
在服务器或浏览器中,一种实现是池队列的数组/向量,其中包含 [[power-of-2] 的缓冲区,增加缓冲区大小,从"平均页面大小"开始 - 一个箱数组。 在启动时加载一些合理数量的缓冲区的箱。 如果网络 rx 填充了一个缓冲区,请从下一个 bin 向上获取一个缓冲区,将其链接到第一个缓冲区并开始填充该缓冲区,依此类推。 如果第一个缓冲区具有内容大小,那就更好了 - 您可以选择适当大小的缓冲区(或缓冲区矢量以加快渲染速度以改善用户体验)。 如果你很聪明,你可以在第二个缓冲区完全填满之前开始渲染第一个缓冲区,依此类推。
根据装载情况,您可以动态调整箱内容以适应当前需求。 显然,所有的箱、队列等都是线程安全的(我使用阻塞生产者-消费者队列)。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- "unknown ca"自生成的 CA、证书和客户端/服务器
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- Linux 服务器中的 Recv 缓冲区大小
- 构建使用协议缓冲区(不含 APK)的 Android 可执行 gRPC 服务器
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- 将空缓冲区从客户端发送到服务器
- TCP 服务器/客户端:客户端 recv() 返回空白缓冲区
- 无法从Web服务器读取UTF-8缓冲区
- 客户端服务器编程 - 缓冲区编写
- 客户端服务器编程缓冲区内容不正确
- Web 服务器缓冲区
- 使用 IOCP 的 TCP/IP 服务器.接收缓冲区中偶尔的数据损坏
- 如何在使用之前清除内部服务器套接字缓冲区的内容
- 通过 Boost ASIO 服务器发送缓冲区 - 发送错误的数据
- 当我使用协议缓冲区时,我如何知道服务器端的ByteSize()