WebSocketsPP v3 库的客户端连接限制
Posted
技术标签:
【中文标题】WebSocketsPP v3 库的客户端连接限制【英文标题】:Client connection limit for WebSocketsPP v3 library 【发布时间】:2013-03-16 18:35:41 【问题描述】:在 WebSocket++ 0.3.x 库中,有多少 WebSocket 客户端可以有活动连接的限制是什么?是每个线程一个连接,还是一个线程可以处理多个 WebSocket 客户端连接?如果是后者,一个线程大概能持有多少个连接?
基本上,我正在寻找 WebSocket++ 库可以在大约有 25 个空闲线程的应用程序中处理多少客户端连接的大致数字。图书馆主页是: http://www.zaphoyd.com/websocketpp
【问题讨论】:
【参考方案1】:如果您在支持非阻塞/异步 I/O(Linux 上的 epoll、OS X/BSD 上的 kqueue、Windows 上的 iocp)的平台上使用基于 Boost.Asio 的传输策略和最新版本的 Boost,那么WebSocket++ 没有对同时连接引入任何重大限制。
在这种情况下,限制几乎取决于操作系统、硬件和应用程序因素。操作系统将限制每个进程使用的文件描述符总数(通过 root 访问可以更改此限制)。高并发级别将要求您的应用程序具有适当的结构来处理它(主要使用短的、有限时间的、非阻塞处理程序)。其他因素会像限制通用服务器一样限制您。千兆以太网只能处理这么多流量,使用 TLS 或压缩会降低性能等。
我还没有使用 0.3.x 进行广泛的性能基准测试,但是经过适当调整的应用程序中的 0.2.x 能够轻松地在 i7 内核上为成千上万的并发客户端提供服务。
WebSocket++ 架构的目的是在有足够资源的情况下扩展到任意连接数。如果您正在开发一个将 WebSocket++ 扩展到超过 10k 连接的应用程序,我会对更多细节和解决您发现的任何瓶颈感兴趣。
【讨论】:
感谢您的回答,zaphoyd。这很棒。这比我尝试的第一个库要好得多,虽然很好,但在默认配置中只支持大约 20 个同时连接(每个线程一个)。能够扩展到成千上万个连接的想法听起来很棒。 带有 Boost 1.53 的 Ubuntu 12.10 将满足这些要求,是的。您还需要确保您使用的是基于 ASIO 的传输策略之一(WebSocket++ 附带一些传输策略,并非全部使用 ASIO)。有关更多信息,请参阅zaphoyd.com/websocketpp/manual/reference/configs。 @JoeCoderGuy 假设您正在使用 asio 传输策略并且已正确调整操作系统级别的文件描述符,是的,使用这些标志在 Ubuntu 上使用 g++ 构建将允许通过 epoll 进行大量连接。以上是关于WebSocketsPP v3 库的客户端连接限制的主要内容,如果未能解决你的问题,请参考以下文章
stm32开发笔记:stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能