2014-11-26 3 views
5

Я создаю приложение python с приложением чата. Приложение чата полагается только на торнадо. Но чат требует различного доступа к базе данных, и Django ORM делает это красиво. Я использую веб-чаты торнадо для чата. Поэтому у меня есть следующие варианты:Tornado WebSocket с Django ORM с общим сеансом

  1. Выполнить оба процесса на другой порт, и всякий раз, когда мне требуется для доступа к функциям Django Я сделаю запрос asyncHTTPClient к другому порту и получить данные, но в результате дополнительной нагрузки Джанго сервер
  2. Run Джанго внутри смерч сервера и добавить Джанго проект virtualenv PYTHONPATH и использовать функции Django непосредственно, но это приведет к блокирующим операциям

так что должно быть лучшим способом объединить эти две рамок, так они оба хорошо работают без особых изменений и проблемы с производительностью.

ответ

3

Это зависит от того, сколько раз вам требуется доступ к функциям Django из процесса торнадо. Если такой показатель доступа невелик, то первый подход лучше. И если большой, то выберите второй.

Но я хотел бы попробовать реализовать первый подход, потому что:

  • Большинство логики проекта будет Джанго проекта. Tornado просто предоставит средства для общения
  • Если вы получите доступ к базе данных от торнадо, вам нужно будет синхронизировать свои модели django и модели вашего торнадо. Кроме того, в торнадо лучше использовать драйвер базы данных async. Итак, первый подход позволит избежать этой боли.

На мой взгляд, будет лучше реализовать некоторый REST API на стороне django и на стороне торнадо, и эти процессы будут взаимодействовать через этот API друг с другом. Попытайтесь сконструировать свою архитектуру таким образом, что вам нужно будет использовать этот API как можно реже.

Я бы порекомендовал вам проверить (или, возможно, даже использовать) проект под названием centrifuge. Он построен поверх торнадо и обеспечивает средства для реализации сообщений в реальном времени. Он имеет REST api, поэтому вы можете контролировать его из любого другого процесса. В этом ответе описывается рабочий процесс django + центрифуги: https://stackoverflow.com/a/26930534/821594

Смежные вопросы