PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kostyrskiy
Отправлено: 23 Июля, 2016 - 16:06:37
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




Есть такая задача : в сервисе по онлайн-бронированию билетов у двух и более пользователей есть возможность одновременно проходить процедуру бронирования.
Предположим, что один из них ее прошел, как в режиме реального времени уведомить остальных, что место уже не доступно ??
 
 Top
mrKotik
Отправлено: 23 Июля, 2016 - 17:03:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 264
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




node js
 
 Top
kostyrskiy
Отправлено: 23 Июля, 2016 - 20:20:32
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




А можно подробней? Каков должен быть алгоритм моих действий?
 
 Top
caballero
Отправлено: 23 Июля, 2016 - 20:39:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 5994
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
node js

и что? Как нода решает проблему лучше чем php?

Цитата:
как в режиме реального времени уведомить остальных,

в вебе не бывает режима реального времени.
если надо уведомляьть более менее вовремя - яваскрипт по таймеру запрашива.щий сервер насчет изменений


-----
Open Source учетная система http://zippy[dot]com[dot]ua/
 
 Top
kostyrskiy
Отправлено: 23 Июля, 2016 - 21:03:09
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




caballero пишет:
Цитата:
node js

и что? Как нода решает проблему лучше чем php?

Цитата:
как в режиме реального времени уведомить остальных,

в вебе не бывает режима реального времени.
если надо уведомляьть более менее вовремя - яваскрипт по таймеру запрашива.щий сервер насчет изменений



Т.е. единственный способ решения задачи - периодически делать запросы на сервер на предмет того, не был ли забронирован еще билет
 
 Top
IllusionMH
Отправлено: 23 Июля, 2016 - 21:12:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




kostyrskiy, нет еще есть варианты с Server-Sent Events и websokets. позволит создавать соединение в котором инициатором сообщеиня будет выступать сервер, а не клиент по таймеру.
 
 Top
kostyrskiy
Отправлено: 23 Июля, 2016 - 21:50:49
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




создал объект EventSource и обработчик событий
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. <script>
  3.     if (!!window.EventSource) {
  4.         var source = new EventSource('/stream.php');
  5.     }
  6.     source.addEventListener('message', function(e) {
  7.         console.log(e.data);
  8.     }, false);
  9.  
  10.     source.addEventListener('open', function(e) {
  11.         console.log('1');
  12.     }, false);
  13.  
  14.     source.addEventListener('error', function(e) {
  15.         if (e.readyState == EventSource.CLOSED) {
  16.             console.log('0');
  17.         }
  18.     }, false);
  19. </script>

и файл stream.php в корне
так работает (т.е. виводит сообщение в консоль)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. header('Content-Type: text/event-stream');
  5. header('Cache-Control: no-cache');
  6.  
  7. function send($id, $msg) {
  8.  
  9.     echo "id: $id" . PHP_EOL;
  10.     echo "data: $msg" . PHP_EOL;
  11.     echo PHP_EOL;
  12.     ob_flush();
  13.     flush();
  14. }
  15.  
  16. $id = (int)$_GET['id'];
  17.  
  18. $sql = "select status from stadium WHERE id = {$id}";
  19.  
  20. //$status = App::$db->query($sql);
  21. //$status = (int)$status;
  22. $serverTime = time();
  23. send($serverTime, $id);
  24.  


а так нет
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. header('Content-Type: text/event-stream');
  5. header('Cache-Control: no-cache');
  6.  
  7. function send($id, $msg) {
  8.  
  9.     echo "id: $id" . PHP_EOL;
  10.     echo "data: $msg" . PHP_EOL;
  11.     echo PHP_EOL;
  12.     ob_flush();
  13.     flush();
  14. }
  15.  
  16. $id = (int)$_GET['id'];
  17.  
  18. $sql = "select status from stadium WHERE id = {$id}";
  19.  
  20. $status = App::$db->query($sql);
  21. $status = (int)$status;
  22. $serverTime = time();
  23. send($serverTime, $id);
  24.  


Очень нужно запрос к бд сделать Что тут не так?

(Отредактировано автором: 24 Июля, 2016 - 01:00:34)

 
 Top
Fart
Отправлено: 25 Июля, 2016 - 07:22:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




kostyrskiy пишет:
А можно подробней? Каков должен быть алгоритм моих действий?


если не понимаешь как работают библиотеки клиентской части, а это js, jquery, ajax... советую почитать.

но по сабжу: как же реализовать твою идею???

так как это веб-программирование, то нужно наладить общение:
1. клиент-сервер
2. сервер-клиент
3. клиент-сервер-клиент (эта схема детище 1 и 2 вариантов)

как это делается
1. клиент-сервер: при осуществлении действий пользователем, сервер проверяет соответствует ли действительности и возможно ли сделать то, о чем ты спрашиваешь. если можно осуществить, то приобретение билетов проходит.
2. сервер-клиент: если пункт 1 запрещен и пользователь не имеет права сделать этого, то сервер его уведомляет об этом.
3. клиент-сервер-клиент: допускается 2ой пользователь, который хочет, купить но пока что этого не сделал. тут либо возвращаешься к пункту 1, и/или добавляешь AJAX-запрос на проверку данных об этом через определенные промежутки времени. например каждые 3-5 сек. желательно от 5 до 10. зависимости от нагрузки. при получении данных от сервера. тем самым пользователь номер 2 увидит об изменения ОНЛАЙН!!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB