Есть такая задача : в сервисе по онлайн-бронированию билетов у двух и более пользователей есть возможность одновременно проходить процедуру бронирования.
Предположим, что один из них ее прошел, как в режиме реального времени уведомить остальных, что место уже не доступно ??
1. kostyrskiy - 23 Июля, 2016 - 16:06:37 - перейти к сообщению
2. mrKotik - 23 Июля, 2016 - 17:03:37 - перейти к сообщению
node js
3. kostyrskiy - 23 Июля, 2016 - 20:20:32 - перейти к сообщению
А можно подробней? Каков должен быть алгоритм моих действий?
4. caballero - 23 Июля, 2016 - 20:39:02 - перейти к сообщению
Цитата:
node js
и что? Как нода решает проблему лучше чем php?
Цитата:
как в режиме реального времени уведомить остальных,
в вебе не бывает режима реального времени.
если надо уведомляьть более менее вовремя - яваскрипт по таймеру запрашива.щий сервер насчет изменений
5. kostyrskiy - 23 Июля, 2016 - 21:03:09 - перейти к сообщению
caballero пишет:
и что? Как нода решает проблему лучше чем php?
в вебе не бывает режима реального времени.
если надо уведомляьть более менее вовремя - яваскрипт по таймеру запрашива.щий сервер насчет изменений
Цитата:
node js
и что? Как нода решает проблему лучше чем php?
Цитата:
как в режиме реального времени уведомить остальных,
в вебе не бывает режима реального времени.
если надо уведомляьть более менее вовремя - яваскрипт по таймеру запрашива.щий сервер насчет изменений
Т.е. единственный способ решения задачи - периодически делать запросы на сервер на предмет того, не был ли забронирован еще билет
6. IllusionMH - 23 Июля, 2016 - 21:12:03 - перейти к сообщению
kostyrskiy, нет еще есть варианты с Server-Sent Events и websokets. позволит создавать соединение в котором инициатором сообщеиня будет выступать сервер, а не клиент по таймеру.
7. kostyrskiy - 23 Июля, 2016 - 21:50:49 - перейти к сообщению
создал объект EventSource и обработчик событий
CODE (javascript):
скопировать код в буфер обмена
скопировать код в буфер обмена
- <script>
- if (!!window.EventSource) {
- var source = new EventSource('/stream.php');
- }
- source.addEventListener('message', function(e) {
- console.log(e.data);
- }, false);
- source.addEventListener('open', function(e) {
- console.log('1');
- }, false);
- source.addEventListener('error', function(e) {
- if (e.readyState == EventSource.CLOSED) {
- console.log('0');
- }
- }, false);
- </script>
и файл stream.php в корне
так работает (т.е. виводит сообщение в консоль)
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- function send($id, $msg) {
- echo "id: $id" . PHP_EOL;
- echo "data: $msg" . PHP_EOL;
- echo PHP_EOL;
- }
- $id = (int)$_GET['id'];
- $sql = "select status from stadium WHERE id = {$id}";
- //$status = App::$db->query($sql);
- //$status = (int)$status;
- send($serverTime, $id);
а так нет
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- function send($id, $msg) {
- echo "id: $id" . PHP_EOL;
- echo "data: $msg" . PHP_EOL;
- echo PHP_EOL;
- }
- $id = (int)$_GET['id'];
- $sql = "select status from stadium WHERE id = {$id}";
- $status = App::$db->query($sql);
- $status = (int)$status;
- send($serverTime, $id);