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

【免费下载链接】uWebSockets Simple, secure & standards compliant web server for the most demanding of applications 【免费下载链接】uWebSockets 项目地址: 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实现相比的性能优势。

uWebSockets与fastwebsockets性能对比

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

不同uWebSockets版本在Linux 6.1上的性能

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

Linux平台上WebSocket消息回显性能对比

这张对比图表展示了在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无疑是一个值得深入研究和采用的选择。它不仅能够满足当前的需求,还能为未来的业务增长提供坚实的技术基础。

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐