У меня многопользовательская поддержка server
который основан на qxmpp
библиотека написана на Qt
и расширены путем наследования 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?
Так как все расширения, которые работают через базу данных, используют его соответственно.
Вы можете прочитать больше о синглетах в целом, почему они считаются плохими во многих случаях:
Что такого плохого в синглетонах?
Я бы лично избегал их в твоем случае без контекста. Единственная причина, по которой вы до сих пор покупали синглтоны вместо передачи ссылок или чего-то подобного, вы бы сэкономили немного памяти для службы сервера.
Основываясь на обсуждении, всегда лучше убедиться, что у вас есть какой-то эталонный тест, когда разница в сложности не очевидна. В вашем особом случае, с дополнительной 216 КБ памяти для около 1000 клиентов, вы получите около 250 МБ дополнительной памяти.
Я немного округлю это число на всякий случай. Это никоим образом не сравнимо с емкостью вашего сервера, которая составляет около 16 ГБ. Если у вас есть другие службы, требующие памяти, они, вероятно, будут более обидным местом для поиска оптимизации.
При этом, если вы хотите пойти на одиночные игры, вы можете реализовать это на вершине Q_GLOBAL_STATIC или же Q_GLOBAL_STATIC_WITH_ARGS макросы в Qt. Обратите внимание, что это также было публично в Qt 4, хотя и недокументировано. Насколько я знаю, в Qt 4 он не имел надлежащей безопасности потоков, хотя в Qt 5 он был значительно улучшен.
Других решений пока нет …