自有Socket I/O框架下,求仅实现WebSocket [RFC 6445]的C++纯库
看来你已经有自己的Socket I/O处理框架了,现在需要的是纯WebSocket协议实现的C++库——能直接接收buffer/char*作为输入流,而不是像uwebsockets或websocketpp那样封装成完整服务器的方案,这点需求抓得很准。下面几个库完全匹配你的要求:
libwebsockets(核心协议模式)
别被它名字里的"server"误导,libwebsockets提供了纯协议解析的核心模式。你只需要启用LWS_ROLE_WS角色,就能完全接管底层Socket I/O:把自己框架收到的char*或buffer数据手动喂给协议解析器,然后处理解析后的WebSocket帧(文本、二进制、控制帧等)。它严格遵循RFC 6445,能和你的自定义Socket框架无缝集成,完全不需要用它自带的服务器循环。WebSocket++(纯核心配置)
你提到WebSocketpp不符合需求,但其实它支持脱离服务器封装的纯协议处理。只要使用它的core配置(而非默认的server或client配置),就能创建独立的connection对象,调用process_input方法直接传入char*或buffer数据,同时注册回调处理解析后的帧。默认示例可能偏向完整服务端,但调整配置后,它就是个纯粹的协议解析库,完美适配你的输入流需求。Boost.Beast WebSocket模块
Boost.Beast的WebSocket组件是纯协议实现,没有绑定任何特定I/O框架。它设计成能和任意异步或同步的Socket I/O配合使用:你可以把收到的buffer数据传给websocket::stream的解析接口,或者手动处理缓冲区进行帧解析。它严格遵循RFC 6445,兼容C++11及以上版本,和自定义Socket框架集成起来非常顺畅。轻量纯解析代码片段
如果追求极致轻量化,还可以找一些开源的纯WebSocket解析代码片段——比如从某些项目中提取的RFC 6445解析模块。这类实现通常只有几个文件,直接接收char*缓冲区做帧解析,完全没有服务器封装,所有I/O流程都由你掌控。
核心使用要点
不管选哪个库,一定要启用它们的纯协议解析模式,避开完整的服务器/client封装。核心流程就是:你负责底层Socket的读写,把收到的原始字节流传给WebSocket库的解析接口,处理库输出的WebSocket帧;发送时则把要发送的帧数据交给库,拿到原始字节流后通过你的Socket框架发送出去。
内容的提问来源于stack exchange,提问作者user9712902

