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

µWebSockets:一种WebSocket服务器实现

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51475844

µWebSockets:一种WebSocket服务器实现

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

µWebSockets简称µWS,是一个超轻量级的、高效的、可扩展的WebSocket服务器实现,基于Node.js开发,主要特征是易于使用、完全异步的面向对象的接口,并且可以扩展到数百万的连接,与同类的产品相比,其内存占用只有竞品的几分之一,采用zlib/libpng许可证(非常宽松的许可证,适合商业应用)。

µWS的主要特性包括:

1)支持Linux、OSX、Windows
2)内建了负载平衡和支持多核
3)支持SSL/TLS安全访问,且可以与外部HTTPS服务器相集成
4)内建Permessage-deflate(读取压缩消息)
5)Node.js绑定对外暴露WS接口
6)可选择作为如Socket.IO、Primus或SocketCluster库的ws引擎

注:

1)Socket.io: https://github.com/socketio/socket.io
2)Primus: https://github.com/primus/primus
3)SocketCluster: http://socketcluster.io/

µWS的安装:

npm install --save uws

µWS与竞品的比较

    竞品                          内存消耗        连接性能        短消息吞吐率      长消息吞吐率
libwebsockets master(1.7-1.8)   µWS是其的1/14      µWS与其性能相当   µWS是其33倍的性能 µWS与其性能相当
ws v1.1.0 + binary addons       µWS是其的1/47      µWS是其18倍的性能 µWS是其33倍的性能 µWS是其2倍的性能
WebSocket++ v0.7.0              µWS是其的1/63      µWS是其4倍的性能  µWS是其3倍的性能  µWS是其2倍的性能

以上基准测试,所有库均使用默认配置,libwebsockets以后可以换用2.0测试。

在SocketCluster中使用µWS

可以像这样使用WS引擎:

var socketCluster = new SocketCluster({ wsEngine: 'uws' });

µWS紧跟SocketCluster的开发,目标是在SocketCluster 5版中成为其默认的WebSocket引擎。

µWS的C++版

这个版本的性能最佳,遗憾的是缺少文档。查看头文件可以规避使用方面的问题。

int main()
{
    /* this is an echo server that properly passes every supported Autobahn test */
    uWS::Server server(3000);
    server.onConnection([](uWS::Socket socket) {
        cout << "[Connection] clients: " << ++connections << endl;
    });

    server.onMessage([](uWS::Socket socket, const char *message, size_t length, uWS::OpCode opCode) {
        socket.send((char *) message, length, opCode);
    });

    server.onDisconnection([](uWS::Socket socket) {
        cout << "[Disconnection] clients: " << --connections << endl;
    });

    server.run();
}

相关文章:

  • 瞬间移动(组合数, 逆元)
  • Vue性能优化:如何实现延迟加载和代码拆分?
  • Guava - 并行编程Futures
  • Mybatis Generator逆向工程的使用
  • springMvc REST 请求和响应
  • 数字水印技术的研究现状与发展趋势
  • 简单登录系统
  • warning no match for this type name:xxx.xxx.xxx [Xlint:invalidAbsoluteTypeName]
  • 用UltraISO制作系统安装u盘
  • index merge的一次优化
  • python之下载每日必应壁纸
  • malloc与free函数用法
  • 通读现代软件工程之构建之法
  • Nagios 监控
  • Python使用UUID库生成唯一ID
  • [译]CSS 居中(Center)方法大合集
  • 「译」Node.js Streams 基础
  • Angular 响应式表单 基础例子
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Consul Config 使用Git做版本控制的实现
  • HTTP 简介
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • js作用域和this的理解
  • nodejs调试方法
  • springboot_database项目介绍
  • swift基础之_对象 实例方法 对象方法。
  • vue2.0项目引入element-ui
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 记一次删除Git记录中的大文件的过程
  • 深度学习在携程攻略社区的应用
  • 用Visual Studio开发以太坊智能合约
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云API、SDK和CLI应用实践方案
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2015)JS ES6 必知的十个 特性
  • (4)Elastix图像配准:3D图像
  • (C++17) std算法之执行策略 execution
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)c52学习之旅-中断
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四) 虚拟摄像头vivi体验
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (译)2019年前端性能优化清单 — 下篇
  • (转)负载均衡,回话保持,cookie
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET CF命令行调试器MDbg入门(三) 进程控制