我有一个支持server
的多用户,它基于用Qt
编写的qxmpp
库,并通过继承QXmppServerExtension
来扩展。所以,我的问题是:Considering multi-user support in my server, whether it's safe or not to use a Singletone class for database connection and holding a connection for QSqlQuery?
因为,所有通过数据库工作的扩展都分别使用它。
您可以阅读更多关于单态的信息,通常为什么它们在许多情况下被认为是坏的:
辛格尔顿有什么不好的?
我个人会在没有上下文的情况下避免它们。到目前为止,你购买单身人士的唯一原因是,你会为服务器服务腾出一些内存,而不是四处传递参考资料或诸如此类的东西。
根据讨论,当复杂性差异不明显时,最好确保有一些基准。在您的特殊情况下,如果为大约1000个客户端增加216K内存,您将获得大约250 MB的额外内存使用量。
我把这个数字四舍五入一点,以防万一。这与您的服务器的容量(大约为16GB)根本无法相比。如果你有其他需要内存的服务,那么这些服务可能是一个更令人反感的优化地方。
也就是说,如果您希望使用singleton,您可以在Qt中的Q_GLOBAL_STATIC或Q_GLOBAL_STATIC_WITH_ARGS宏之上实现它。请注意,这在问题4中也是公开的,尽管没有记录在案。据我所知,它在Qt4中没有适当的螺纹安全性,尽管在Qt5中有了显著的改进。