天天看點

µWebSockets:一種WebSocket伺服器實作µ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();
}