4 votes

Comment faire fonctionner wsgi à côté des canaux daphne ASGI pour django

J'utilise les canaux de django dans mon projet en utilisant les canaux officiels de django. channels v2 Mon application simple sur les canaux est terminée et fonctionne correctement si elle est exécutée. python manage.py runserver mais je veux faire fonctionner les canaux de django dans un port différent et j'utilise donc daphne
en utilisant daphne my_project.asgi:application --port 8001 il fonctionne correctement sur le port 8001

INFO     Starting server at tcp:port=8001:interface=127.0.0.1
INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)

et j'exécute également python manage.py runserver dans un autre terminal en parallèle fonctionne bien. maintenant mes deux canaux en 8001 et django dans 8000 Le port fonctionne correctement mais ma commande runserver exécute ASGI/Channels au lieu du serveur de développement wsgi,

Starting ASGI/Channels version 2.2.0 development server at http://127.0.0.1:8000/

au lieu de

Starting development server at http://127.0.0.1:8000/

settings.py

ASGI_APPLICATION = 'my_project.routing.application'

WSGI_APPLICATION = 'my_project.wsgi.application'

Si je débogue une fonction dans views.py il s'agit d'une requête ASGI au lieu d'une requête django wsgi

asgi.py
import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
django.setup()
application = get_default_application()

ma question est la suivante :

  1. comment obtenir une requête django au lieu d'une requête ASGI dans notre requête de vue de fonction normale (comme def index(request) ) ou si nous installons les canaux django, chaque requête devient une requête ASGI ?
  2. Quelle est l'utilité de la commande python mange.py runworker ?

2voto

pako Points 380

Comme vous pouvez le lire ici : https://asgi.readthedocs.io/en/latest/

ASGI (Asynchronous Server Gateway Interface) est le successeur spirituel de l'ASGI. de WSGI, destiné à fournir une interface standard entre les serveurs de les serveurs web Python asynchrones, les frameworks et les applications.

Lorsque le WSGI a fourni un en fournit une pour les applications asynchrones et synchrones, avec une implémentation WSGI et de multiples serveurs et applications. d'applications.

La réponse à votre question n° 1 est donc la suivante : Yes, all requests will be ASGI .

Question n° 2 - Il s'agit d'une commande permettant d'exécuter plusieurs travailleurs pour traiter les demandes de canaux de manière asynchrone. https://channels.readthedocs.io/en/1.x/deploying.html#run-worker-servers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X