我和我的同事都觉得 OpenSSL 或多或少需要从我们的应用程序中得到推销,但我想就它是否真的这么糟糕或者我们使用这个库时是否存在可能导致的问题提出一些意见我们麻烦了。
设置:为每个用户维护持久 SSL 连接的多线程 C++ 应用程序。
在 500 个用户时,它运行良好。我正在尝试将限制增加到 1000,而 960 左右在 SSL_read
中出现段错误。此读取是此特定连接的第一个 I/O 操作。我必须将 ulimit
中的文件限制从 1024 增加到 4096 才能达到这个高度。所以我的问题是:
1) 库是否需要配置为知道接受这么多连接?
2) 是否可以通过少量使用互斥锁来解决线程问题?不过,我不能将整个 SSL_read 变成关键 strip 。
3) 只是一个有问题的库,需要扔掉吗?
最佳答案
根据您的评论,每个连接 1 个线程似乎不是线程的有效使用。
我建议使用线程池并使用工作线程来处理接收到的数据包。接收到的数据包可以在队列中排队,工作线程将处理来自队列的数据包。 openSsl 连接可以存储在所有线程通用的容器中。必须小心按顺序处理数据包。是的,将需要同步(互斥锁)。
关于c++ - OpenSSL 库压力容忍度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018412/