html5 websocket c++,C++ WebSocket 库

WebSocket 是 HTML5 的一个引入注目的特性,它通常用于 Web 端,为构建实时的 Web 应用提供方便。WebSocket 是一个基于 TCP 的协议,它借助于 HTTP 请求,建立客户端与服务器端之间的双向通道,通道建立完成后,客户端和服务器端都可以通过这条通道方便地收发消息,因而 WebSocket 一向有着 “Web 的 TCP” 之称。

WebSocket 不是 JavaScript 的一个接口,而是一个定义良好的基于消息的协议。得益于不同平台对于 WebSocket 协议的广泛实现,它更为跨多种平台的 实时网络应用程序 开发提供了极大的方便。除了可以在前端开发的 JavaScript 中使用 WebSocket 之外,我们也可以在 Java、C++、Go、Rust 等编程语言平台中使用 WebSocket。

uWebSockets 是一个 C/C++ 的 WebSocket 库,它的 GitHub 主页 列出了一些常见的 WebSocket 实现库的对比,如下图:

64e36cd3ed1a?from=singlemessage

overview.png

其中,ws-rs,项目主页,GitHub 主页,是一个轻量级的,事件驱动的用于 Rust 的 WebSocket 库。Gorilla,项目主页,GitHub 主页,是 Go 语言的 Web 工具包,它包含了 WebSocket 的实现,WebSocket 实现的 GitHub 主页。websockets,项目主页,GitHub 主页,是一个 Python 的 WebSocket 实现。Socket.IO,项目主页,GitHub 主页,主要是 Node.JS 服务器的实时应用框架,其中包含了 WebSocket 的实现。其它库则都是 C/C++ 的 WebSocket 实现。

从中我们可以捞到 uWebSockets、Crow、websocketpp、Beast 这样几个 C/C++ 的 WebSocket 库。此外,还有 libwebsockets 和 POCO 库的 WebSocket 模块。这样就总共有 6 个 C/C++ 的 WebSocket 库可以用。这里汇总已知的可以在 C++ 中使用的 WebSocket 库。

uWebSockets

uWebSockets,µWS ("microWS") 是一个客户端和服务器的 WebSocket 和 HTTP 实现。它简单、高效且轻量级。

这个库在底层依赖于

libwebsockets

规范 libwebsockets.org websocket 库

在 Mac OS 上编译通过如下方式编译这个库:

$ git clone https://github.com/warmcat/libwebsockets.git

$ cd libwebsockets

$ mkdir build

$ cd build

$ cmake ..

$ make

一些比较老版本的 Mac OS 在上面执行 cmake .. 会报出如下的错误:

-- Performing Test LWS_HAVE_VISIBILITY - Success

Compiling with SSL support

CMake Error at /usr/local/Cellar/cmake/3.5.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:148 (message):

Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the

system variable OPENSSL_ROOT_DIR (missing: OPENSSL_INCLUDE_DIR)

Call Stack (most recent call first):

/usr/local/Cellar/cmake/3.5.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)

/usr/local/Cellar/cmake/3.5.2/share/cmake/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args)

CMakeLists.txt:1438 (find_package)

-- Configuring incomplete, errors occurred!

See also "/Users/netease/Projects/CppWebsockets/libwebsockets/build/CMakeFiles/CMakeOutput.log".

See also "/Users/netease/Projects/CppWebsockets/libwebsockets/build/CMakeFiles/CMakeError.log".

这主要是系统默认的 OpenSSL 库版本过老导致的。这个问题可以通过安装一个新版本的 OpenSSL 库,并在执行 cmake .. 之前定义系统环境变量 OPENSSL_ROOT_DIR 来解决,如 OpenSSL 安装在 /usr/local/opt/openssl/ 目录中,则像下面这样定义环境变量:

$ export OPENSSL_ROOT_DIR=/usr/local/opt/openssl/

在执行 make 编译这个库时,会报出另一个问题:

[ 46%] Built target websockets

Scanning dependencies of target test-server-extpoll

[ 47%] Building C object CMakeFiles/test-server-extpoll.dir/test-apps/test-server.c.o

[ 48%] Linking C executable bin/libwebsockets-test-server-extpoll

clang: error: argument unused during compilation: '-pthread'

make[2]: *** [bin/libwebsockets-test-server-extpoll] Error 1

make[1]: *** [CMakeFiles/test-server-extpoll.dir/all] Error 2

这个问题需要修改工程的编译配置文件,具体而言,是修改工程根目录下的 CMakeLists.txt,移除其中出现的所有 -pthread 标记。

Poco Websocket

POCO C++ 库是一个跨平台的 C++ 网络库。其中包含了 WebSocket 的实现模块。Poco 库是一个比较强大,比较复杂的网络库。

在 Mac OS 上,可以通过执行 build_cmake.sh 来构建,如:

$ ./configure --minimal

$ ./build_cmake.sh

Crow

Crow 是一个 Web 微框架。

这个库在底层依赖于 boost 库,作为异步网络 I/O 库。

websocketpp(WebSocket++)

websocketpp 是 C++ 的 WebSocket 客户端/服务器库。它是一个开源的只包含头文件的 C++ 库,它实现了 RFC6455 WebSocket 协议。它允许向 C++ 程序中集成 WebSocket 客户端和服务器功能。它使用可交换的网络传输模块,包括基于 C++ iostreams 的和基于 Boost Asio 的。

Beast

基于 Boost.Asio 以 C++11 构建的 HTTP 和 WebSocket 库。Boost 项目的 HTTP 和 WebSocket 库。

在以上的 6 个 C/C++ WebSocket 库中,其中有 3 个(Crow、websocketpp(WebSocket++)和 Beast)是基于 Boost 的网络库实现的。

参考资料:

Done.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值