Tornado WebSocket с Django ORM със споделена сесия

Създавам приложение на python с приложение за чат. Чат приложението разчита само на торнадо. Но чатът изисква различен достъп до база данни и Django ORM прави това прекрасно. Използвам торнадо уебсокети за чат. Така че имам следните опции:

  1. Стартирайте и двата процеса на различен порт и винаги, когато имам нужда от достъп до функциите на Django, ще направя заявка за asyncHTTPClient към друг порт и ще получа данни, но това ще доведе до допълнително натоварване на django сървъра
  2. Стартирайте Django в торнадо сървър и добавете django проект към virtualenv PYTHONPATH и използвайте функциите на Django директно, но това ще доведе до блокиращи операции

И така, какъв трябва да бъде най-добрият начин за сливане на тези две рамки, така че и двете да работят добре без много промени и проблеми с производителността.


person Dheerendra    schedule 26.11.2014    source източник


Отговори (1)


Зависи от това колко пъти се нуждаете от достъп до функциите на Django от процеса торнадо. Ако такъв брой достъпи е нисък, тогава първият подход е по-добър. И ако е голям, тогава изберете второ.

Но бих се опитал да приложа първия подход, защото:

  • По-голямата част от логиката на проекта ще бъде в проекта django. Tornado просто ще предостави средства за чат
  • Ако имате достъп до базата данни от торнадо, тогава ще трябва да поддържате синхронизирани вашите django модели и вашите модели торнадо. Освен това в торнадо е по-добре да използвате асинхронен драйвер за база данни. Така че първият подход ще избегне тази болка.

Според мен ще бъде по-добре да внедрите някои REST API от страна на django и от страна на торнадо и тези процеси ще комуникират чрез този API помежду си. Опитайте се да проектирате вашата архитектура по такъв начин, че да трябва да използвате този API възможно най-рядко.

Бих препоръчал да проверите (или може би дори да използвате) проект, наречен centrifuge. Той е изграден върху торнадо и предоставя средства за прилагане на съобщения в реално време. Има REST API, така че можете да го контролирате от всеки друг процес. В този отговор е описан работният процес на django+centrifuge: https://stackoverflow.com/a/26930534/821594

person stalk    schedule 26.11.2014