Прежде всего, я бы определил, зачем вам Джанго и Твист. Предполагая, что вы знакомы с Twisted, достаточно использовать twisted.web и auth, и вы сможете повторно использовать слой базы данных как для внешнего, так и для внутреннего приложений.
В качестве альтернативы вы могли бы взглянуть на это по-другому, что Twisted делает лучше в качестве игрового сервера? Вы надеетесь поддержать больше игроков (больше одновременных соединений) или что-то еще? Учтите, что если вам необходимо использовать многопотоковое соединение внутри витой для блокирования доступа к базе данных, вы, скорее всего, не сможете эффективно / надежно поддерживать сотни одновременных потоков. Помните, что в python есть глобальная блокировка интерпретатора, поэтому потоки не обязательно являются лучшим способом масштабирования.
Вам также следует подумать, почему вы хотите использовать базу данных SQL и ORM. Есть ли в вашей игре данные, которые действительно лучше всего подходят для хранения в реляционной базе данных? Возможно, стоит изучить что-то вроде MongoDB или другой базы данных значений ключей или объектов для хранения состояния игры. Многие из этих хранилищ NoSQL имеют как блокирующие драйверы для использования в Django, так и неблокирующие драйверы для использования в Twisted (например, txmongo).
Тем не менее, если вы не можете использовать Django и Twisted, есть несколько способов встроить блокирующий доступ к БД в неблокирующий Twisted сервер.
- adbapi (использует витой пул потоков)
- Непосредственное использование пула витых нитей с использованием реактором.deferToThread
- В Storm ORM есть ветвь, обеспечивающая поддержку Twisted (она обрабатывает вызовы deferToThread внутри)
- SAsync - это библиотека, которая пытается заставить SQLAlchemy работать асинхронно
- Скручено взаимодействовать через RPC с процессом, управляющим блокирующей БД
Таким образом, вы должны иметь возможность самостоятельно управлять объектами Django ORM, импортируя их в скрученном виде и очень осторожно совершая вызовы в реактор.deferToThread. Существует много возможных проблем при работе с этими объектами в витой форме, так как некоторые объекты ORM могут выдавать SQL при доступе / установке свойства и т. Д.
Я понимаю, что это не обязательно тот ответ, который вы ожидали, но, возможно, более подробная информация о том, что вы надеетесь достичь, и о том, почему вы выбираете эти конкретные технологии, позволит людям получить лучшие ответы.