当前位置: 首页 > news >正文

100K并发下的成本革命:uWebSockets边缘计算性能价格比深度分析

100K并发下的成本革命:uWebSockets边缘计算性能价格比深度分析

【免费下载链接】uWebSocketsSimple, secure & standards compliant web server for the most demanding of applications项目地址: https://gitcode.com/gh_mirrors/uw/uWebSockets

uWebSockets是一款简单、安全且符合标准的Web服务器,专为最苛刻的应用程序设计。它在处理高并发连接时展现出卓越的性能,能够在边缘计算环境中实现极高的性能价格比,为开发者和企业带来显著的成本优势。

为什么uWebSockets是边缘计算的理想选择?

边缘计算需要在资源受限的环境中处理大量并发请求,对服务器的性能和资源占用提出了极高的要求。uWebSockets凭借其极致的性能优化和低资源消耗,成为边缘计算场景的理想选择。

在性能方面,uWebSockets表现出色。它在加密TLS 1.3消息传递方面的速度,甚至超过了大多数替代服务器在未加密明文消息传递方面的速度。这种高性能使得在边缘设备上处理大量并发连接成为可能。

资源消耗方面,uWebSockets具有极小的内存占用。它是完全标准的头文件C++17实现,编译后二进制文件仅为几千字节,能够在资源有限的边缘设备上高效运行。

惊人的并发处理能力

uWebSockets在并发处理方面有着令人印象深刻的表现。公开案例显示,单个树莓派4可以同时服务超过100k个非常活跃的TLS 1.3 WebSocket连接,并且具有出色的稳定性。这在大多数替代解决方案中是完全不可能实现的,它们在如此有限的硬件上,在负载的一小部分时就会出现问题。

uWebSockets性能优势的直观展示

以下图表直观地展示了uWebSockets与其他WebSockets实现相比的性能优势。

上图显示了在1个CPU核心上,不同消息大小下WebSocket服务器的回显性能。可以看到,uWebSockets v20.42.0在各种消息大小下都表现出优于denoland/fastwebsockets v0.4的性能。

这张图表展示了在Linux 6.1系统上,不同uWebSockets版本的WebSocket回显性能。uWebSockets v21.0.0-alpha1在各种消息大小和连接数下都展现出显著的性能优势。

这张对比图表展示了在Linux平台上,各种WebSocket实现的消息回显性能(非流水线,CPU时间标准化)。uWS v0.15(深蓝色柱状图)在所有测试的实现中表现出明显的性能领先。

快速开始使用uWebSockets

要开始使用uWebSockets,首先需要克隆仓库:

git clone https://gitcode.com/gh_mirrors/uw/uWebSockets

uWebSockets的使用非常简单,以下是一个基本的示例:

int main() { uWS::App().get("/*", [](auto *res, auto *req) { res->end("Hello World!"); }).listen(9001, [](auto *listenSocket) { if (listenSocket) { std::cout << "Listening for connections..." << std::endl; } }).run(); std::cout << "Shoot! We failed to listen and the App fell through, exiting now!" << std::endl; }

这个简单的示例创建了一个基本的HTTP服务器,监听9001端口并对所有请求返回"Hello World!"。

构建和编译

uWebSockets是100%标准的头文件C++17实现,可以在任何平台上编译。它依赖于µSockets,这是一个适用于Linux、macOS和Windows的平台特定C代码。

在Linux和macOS上,可以使用Makefile进行构建:

WITH_OPENSSL=1 make examples

这将构建所有启用SSL的示例。如果找不到证书和密钥,示例将无法监听,因此请确保指定适合您的路径。

uWebSockets的核心特性

优化的安全性

uWebSockets经过精心优化,以提高速度和内存占用。它参与了Google的OSS-Fuzz项目,每日模糊测试覆盖率约为95%,且没有消毒器问题。LGTM给我们评分为完美的A+,因为没有CodeQL警报,并且我们使用严格的警告级别进行编译。

battle-tested

自2016年以来,uWebSockets一直完全符合标准,Autobahn|Testsuite得分完美。它为世界上许多最大的加密货币交易所提供支持,每天处理数十亿美元的交易量。如果您进行加密货币交易,很可能就是通过uWebSockets进行的。

丰富的功能

uWebSockets围绕一个方便的URL路由器设计,支持通配符和参数,并为WebSocket提供高效的发布/订阅功能。对于任何有高要求的实时Web项目,uWebSockets应该是明显的、完整的起点。

您可以在examples目录中找到各种示例,帮助您快速开始构建Http和WebSocket应用程序。

扩展uWebSockets应用

多线程扩展

uWebSockets是单线程的,不能混合线程。在一个线程上从App创建的套接字不能以任何方式在另一个线程上使用。但是,可以通过创建多个App实例并在不同的线程上运行它们来实现扩展。

/* 每个线程一个应用;生成与CPU核心数相同的应用,让uWS共享监听端口 */ uWS::SSLApp({ /* 这些是最常见的选项,fullchain和key。有关更多选项,请参见uSockets。 */ .cert_file_name = "cert.pem", .key_file_name = "key.pem" }).get("/hello/:name", [](auto *res, auto *req) { /* 您也可以高效地流式传输大文件 */ res->writeStatus("200 OK") ->writeHeader("Content-Type", "text/html; charset=utf-8") ->write("<h1>Hello ") ->write(req->getParameter("name")) ->end("!</h1>"); }).ws<UserData>("/*", { /* 仅部分可用的处理程序 */ .open = [](auto *ws) { ws->subscribe("oh_interesting_subject"); }, .message = [](auto *ws, std::string_view message, uWS::OpCode opCode) { ws->send(message, opCode); } }).listen(9001, [](auto *listenSocket) { if (listenSocket) { std::cout << "Listening on port " << 9001 << std::endl; } else { std::cout << "Failed to load certs or to bind to port" << std::endl; } }).run();

自定义架构

uWebSockets构建在µSockets之上,这是一个基础库,在三个不同的层中实现事件、网络和加密。每一层都有多个实现,您可以使用标志控制编译后的组合。目前有五种事件循环集成:libuv、ASIO、GCD和原始epoll/kqueue。

例如:

  • WITH_WOLFSSL=1 WITH_LIBUV=1 make examples构建使用WolfSSL和libuv的示例
  • WITH_OPENSSL=1 make examples构建使用OpenSSL和本机内核的示例

结论:uWebSockets引领边缘计算成本革命

uWebSockets通过其卓越的性能和低资源消耗,正在引领边缘计算的成本革命。它能够在资源受限的边缘设备上处理100K级别的并发连接,大大降低了企业的硬件成本。

无论是构建实时通信应用、物联网设备还是加密货币交易平台,uWebSockets都能提供出色的性能价格比。其简洁的API和丰富的功能使开发变得简单,而其惊人的性能则确保了应用在高负载下的稳定性和响应速度。

如果您正在寻找一种能够在边缘计算环境中提供卓越性能的Web服务器解决方案,uWebSockets无疑是一个值得深入研究和采用的选择。它不仅能够满足当前的需求,还能为未来的业务增长提供坚实的技术基础。

【免费下载链接】uWebSocketsSimple, secure & standards compliant web server for the most demanding of applications项目地址: https://gitcode.com/gh_mirrors/uw/uWebSockets

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/2153718.html

相关文章:

  • 从盲签名到群签名:手把手用Python模拟隐私保护签名(附代码避坑指南)
  • semi-utils深度解析:高效的批量图片处理自动化方案
  • real-anime-z实战手册:批量生成+自动重命名+本地文件夹导出完整脚本
  • 齿轮箱轴承故障诊断与寿命预测【附代码】
  • 九号公司第一季营收58.7亿:同比增15% 净利2亿
  • 【教学类-160-14】20260425 AI视频培训-练习014“豆包AI视频《月下枯蔷(哥特风)》+豆包图片风格:油画”
  • 华硕笔记本性能调校终极指南:G-Helper完全替代Armoury Crate
  • 十大Web安全扫描工具
  • React Native集成AI开发实战:从OpenAI API到移动端智能应用
  • Antenna:插件化声明式数据采集框架的设计与实战
  • 智能体可观测性实践:用Agent-Lens实现LLM智能体全链路追踪与评估
  • 从同步阻塞到毫秒级响应,PHP 8.9 纤维协程落地全链路拆解,手把手带跑通电商秒杀场景
  • 构建高价值技能库:从硬技能到元技能的终身学习策略
  • 图神经网络域融合迁移诊断【附代码】
  • 云原生 DevOps 实践:从理论到落地
  • Godot卡牌游戏框架:数据驱动与模块化设计实践
  • 为什么92%的Swoole-LLM项目在压测第3小时崩溃?揭秘EventLoop阻塞+Token流缓冲区溢出的双重陷阱
  • 3步轻松解锁Cursor Pro高级功能:告别试用限制的终极解决方案
  • Xilinx OSERDESE2原语仿真避坑指南:手把手教你读懂那令人困惑的时序图
  • DreamOmni3:涂鸦引导的多模态AI图像处理框架解析
  • 微软Vidur:高保真LLM推理模拟器,低成本优化大模型部署
  • 425-aguvis tmux
  • 4-26联合训练 tmux
  • 多模态生成式AI技术解析与NVIDIA NeMo实战
  • ARM浮点控制寄存器FPCR详解与应用实践
  • 第96篇:AI赋能体育产业——运动员表现分析、赛事预测与智能训练(项目实战)
  • 开源虚拟数字人框架VirtualPerson:从架构解析到实战部署指南
  • 3步打造个性化iPhone:Cowabunga Lite iOS定制工具完全指南
  • 从《灵魂摆渡・浮生梦》看《第一大道》的创作初心
  • BetterRenderDragon:让你的Minecraft基岩版画面焕然一新