Websocket с Django Channels и IIS - Не найден маршрут для пути
Я пытаюсь развернуть свое приложение Django на сервере IIS, но мой websocket не работает при доступе через IIS, только локально. Что я упустил?
Когда я получаю доступ через IIS:
new WebSocket('ws://server:8000/ws/notificacoes') -> error 1006
Log: ValueError: No route found for path 'ws/notificacoes'
Когда я получаю доступ через python runserver:
new WebSocket('ws://http://127.0.0.1:8000/ws/notificacoes') -> connected
Log: WebSocket HANDSHAKING /ws/notificacoes [127.0.0.1:53541]
WebSocket CONNECT /ws/notificacoes [127.0.0.1:53541]
consumers.py
class NotificacaoConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_group_name = 'notificacoes'
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
async def disconnect(self, close_code):
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
async def notificacao_update(self, event):
await self.send(text_data=json.dumps({
'message': 'Notificação atualizada!'
}))
routing.py
websocket_urlpatterns = [
...
path('ws/notificacoes', NotificacaoConsumer.as_asgi(), name='notificacao'),
]
asgi.py
from index.routing import websocket_urlpatterns
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings")
django_asgi_app = get_asgi_application()
application = ProtocolTypeRouter(
{
"http": django_asgi_app,
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(URLRouter(websocket_urlpatterns))
),
}
)
По совету Лекса Ли я отключил сжатие, перезапустил все соответствующие службы, и все заработало как надо.