polin11
Янв. 31, 2017 02:21:25
Изучаю django, пишу простую игру крестики-нолики, игра серверная 2 пользователя.
Оба заходят на один url, пример localhost:8000/xio, видят игровое поле 3х3 (матрица 3х3), один пользователь
нажимает на ячейку с координатами допустим (1,1). Предположим на сервер ajax запросом (или каким-то другим способом) отправляются данные координаты.
Внимание вопрос, есть ли в django аналог команды допустим из среды node.js
(пакет socket.io команда socket.broadcast.emit() отправить всем сообщение, кроме отправителя), нужно чтобы информация (координаты ячейки)
отправилась второму игроку в браузер, тогда можно данные вообще не хранить на сервере.
Заранее благодарен
plusplus
Янв. 31, 2017 07:46:11
Посмотрите в сторону
https://channels.readthedocs.io/en/stable/И советую вам разобраться чем отличается синхронный фреймворк от асинхронного и что такое Websockets. После этого будет намного проще.
FishHook
Янв. 31, 2017 09:11:40
polin11
Джанга стандартно запускается посредством WSGI, это означает, что каждый Джанго-процесс запускаемый веб-сервером представляет собой вызываемый объект (класс с __call__ или обычную функцию), который постоянно находится в памяти (пока существует процесс) и вызывается веб-сервером при поступлении запроса от клиента. Получается такая цепочка: в момент запуска веб-сервер или сервер приложений типа uWsgi создает несколько процессов, каждый из которых предоставляет свой независимый экземпляр джанго-приложения. При этом происходит импорт всего, до чего Джанга сможет дотянуться, создание ОРМ-связок, подключение сигналов и т.д. После этого джанго-приложение не изменяет своего состояния. На каждый пользовательский запрос сервер-приложений выбирает свободный в данный момент процесс, и передает в специальный вызываемый объект HTTP-запрос и ждёт ответа.
Как видите, никакого способа спровоцировать выполнение этой цепочки в обратном направлении, чтобы процесс в котором запущено джанго-приложение как-то смог постучаться на веб-сервер нет, джанго-приложение это просто функция, она вызывается со стороны и отдает ответ.