Как на Windows работать с websocket django channels?

Ссылка скопирована
1 ответ

я хочю интегрировать websocketы в свой джанго проект, при пропытке установить django channels[daphne]
пишет что нехватает модуля 'fcntl ' , но этого модуля и нет на винде, он есть только на маке или убунту наверное.

вся документация только про daphne, а все видеоуроки походу устарели, так как из них ничего не работает СОВСЕМ.

подскажите пожалуйста, что делать?
как сделать вебсокеты в джанго если у меня винда?

дело не втом что я не знаю как запустить асинхронный сервер, у меня их 2 работает на uvicorn(не предлагайте пожалуйста асинхронные сервера типа waitress и т.д.), а в том что ыебсокеты не работают нивкакую и не насираивается джанго под них почему-то.

User
GET
ws://127.0.0.1:8000/ws/chat/1/
Состояние
404
Not Found
ВерсияHTTP/1.1
Передано291 б (размер 0 б)

а на сервере ни ошибки нифига.

на данный момент я реализовал получение инфы от сервера через SSE(стрим), но эта шляпа допотопная, хорчется по человечески с вебсокетом

Дополнительно:

Возможно проще делать это на линукс - тоесть в той среде, где оно и должно хостится?

  • Поставить виртуалку с линухом.
    Ну или перейти на другой фреймворк или язык. Например яву, котлин, с-шарп, кложа..
  • Drno, я всегда хостил на винде, так как линукс я никогда даже в не трогал никогда и хз что там да как, а изучать наверное супердолго.
  • Алексей Черемисин, неужели на винде с джанго это невозможно?
  • RyanovskY, хостить на винде... мда... мсье знает толк)
  • Drno, в чём собственно разница? спасибо за помощь в решении вопроса
    чекнул разницу, буду пробовать. но вопрос по винде ещё открыт
  • RyanovskY, винда не предназначена для такого просто, вот и всё.. на линукс все сервера работают обычно)
    ну кроме AD 1c
  • какой линукс выбрать? не для слабых пк
  • RyanovskY,
    что тебе мешает место daphne попробовать другой app сервер?
    и да, лучше забей на windows, еще кучу раз будешь встречать разные wtf, так как почти везде django и сопутствующие библиотеки в первую очередь делаются под линукс
  • Everything_is_bad, я легко запускаю сервер на uvicorn, но вебсокеты не работают просто даже на локалхост.
    asgi прорисал, и в юрл и в настройках, но это просто не работает почему-то.

    например на видео у челов на винде прям в в терминале пишет, что запущен локл на asgi, у меня такого нет, буд-то видео 3х летней давности устарели на 20 лет

  • RyanovskY, так может проблема в твоем коде, а не в uvicorn
  • Ответы:

    https://stackoverflow.com/a/45228507/2166371

    Используйте соответствующие "компоненты" для вашей задачи. Это щас выглядит, как будто сайт разрабатывать на lua

    • запустить сервер я умею на uvicorn и на waitress, но толку это не даёт. мне надо вебсокеты настроить, а они не работают нифига, одни ошибки.
      у меня сервера же как-то работают асинхронные, яж не дурак совсем, чтобы не знать как запустить сервер, а в предложенном ресурсе только это и обсуждается.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Юрий Linux Ответ

    Для работы с WebSocket в Django Channels на Windows вам понадобится установить несколько дополнительных компонентов. Во-первых, убедитесь, что у вас установлен Python и pip. Затем выполните следующие шаги:

    1. Установите библиотеку `channels` и `channels-redis` с помощью pip:

       pip install channels channels-redis

    pip install channels channels-redis

    2. Установите Redis на вашем компьютере. Скачать Redis можно с официального сайта https://redis.io/download. После установки запустите Redis сервер.

    3. Создайте файл `routing.py` в вашем приложении Django и определите маршрутизацию для WebSocket соединений:

       from channels.routing import ProtocolTypeRouter, URLRouter
       from channels.auth import AuthMiddlewareStack
       from channels.http import AsgiHandler
       import myapp.routing
     
       application = ProtocolTypeRouter({
           'websocket': AuthMiddlewareStack(
               URLRouter(
                   myapp.routing.websocket_urlpatterns
               )
           ),
           'http': AsgiHandler,
       })

    from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from channels.http import AsgiHandler import myapp.routing application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter( myapp.routing.websocket_urlpatterns ) ), 'http': AsgiHandler, })

    4. Создайте файл `consumers.py` в вашем приложении Django и определите логику обработки WebSocket соединений:

       from channels.generic.websocket import WebsocketConsumer
     
       class MyConsumer(WebsocketConsumer):
           def connect(self):
               # Логика при подключении клиента
               pass
     
           def disconnect(self, close_code):
               # Логика при отключении клиента
               pass
     
           def receive(self, text_data):
               # Логика при получении сообщения от клиента
               pass

    from channels.generic.websocket import WebsocketConsumer class MyConsumer(WebsocketConsumer): def connect(self): # Логика при подключении клиента pass def disconnect(self, close_code): # Логика при отключении клиента pass def receive(self, text_data): # Логика при получении сообщения от клиента pass

    5. Определите URL маршруты для WebSocket соединений в файле `routing.py` вашего приложения:

       from django.urls import re_path
       from . import consumers
     
       websocket_urlpatterns = [
           re_path(r'ws/myapp/$', consumers.MyConsumer.as_asgi()),
       ]

    from django.urls import re_path from . import consumers websocket_urlpatterns = [ re_path(r'ws/myapp/$', consumers.MyConsumer.as_asgi()), ]

    6. Запустите Django Channels сервер с помощью команды:

       daphne myproject.asgi:application

    daphne myproject.asgi:application

    Теперь ваше приложение Django должно успешно работать с WebSocket на Windows с использованием Django Channels. Не забудьте настроить настройки Django для использования Channels и Redis в качестве бэкенда для каналов.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно