Резервирование товара в ИМ - примерный алгоритм

123
IL
На сайте с 20.04.2007
Offline
435
#11
postavkin:
100% определить закрытие браузера возможно или нет. Или тоже могут быть баги.

Невозможно 100%

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
P
На сайте с 06.01.2009
Offline
592
#12

Печально. В угоду удобства юзера (чтобы не возник баг и не снял с резерва у юзера товар) придется оставить резервирование товара под него на на час.

samimages
На сайте с 31.05.2009
Offline
427
#13
postavkin:
не спрашивайте, пожалуйста, почему

я скорее спросил бы: как?

и еще может быть: почему именно ему?

но не буду вас мучить своей праздностью :) в любом случае решение волевое на 146% (без стеба есличё)

Опыт как иммунитет — приобретается в муках! Хостинг: экономия до 1300 руб + домен в подарок ( https://clck.ru/XLscf ) / Аудит семантики от 15К [долго] - ЛС
P
На сайте с 06.01.2009
Offline
592
#14

Ребят.

Сейчас: юзер в товаре - ему резерв на 30минут. Даже если он покуинл страницу не оформляя заказ, резерв будет "висеть".

А можно как то прописать некий пинг страницы у юзера, скажем через 10 минут, если он не онлайн то снимать резерв ? направьте плз куда копать, просто хочется уменьшить вероятность "простоя" товара в резерве.

т.е., страница например уже закрыта, нет подтверждения "пинга" - резерв снимается.

про 10 минут вообще не соображу, как это делается...

Тут вопрос подвис именно с тем, когда юзер в странице статичен (ушел кофе пить), пингуем, документ открыт - резерв подтверждается.

А с заходом нового юзера, неподтвержденные резервы снимаются.

T7
На сайте с 19.09.2018
Offline
63
#15
postavkin:
если он не онлайн то снимать резерв ?

Если задачу правильно понял, то самый простой вариант:

1) табличка: идКорзины/идТовара/Кол-во/timestamp

2) xhr c сайта пишет timestamp

3) крон на сервере удаляет все, где 600 < (CURRENT_TIMESTAMP - timestamp)

P
На сайте с 06.01.2009
Offline
592
#16

timo-71, так и есть. По истечении 30минут с момента постановки товара в резерв - резерв удаляется.

Сейчас речь о том, что нужно минимизировать простой товаров, и хотелось бы особождать товар с резерва через 10минут после постановки в резерв если резерв не подтвержден.

А подтверждать резерв как? Вижу вариант только пинговать юзера на предмет его наличия на сайте. Заставлять жмакать что то через 10 минут бесполезно, может быть он кофе отошел налить (страница статична, он никуда не переходит, ничего не нажимает).

Или я вас не понял...

Поэтому я и подумал, надо через 10минут получить инфу онлайн ли конкретный юзер и документ, если да, резерв подтверждается до 30 минут.

А все неподтвержденые резервы снимаются по крону или любым другим способом, но они не висят 30 минут, так хотя бы то только 10мин.

ps нашел такой код по пингу, но он длится 3сек, это же нагрузка...если все резервы так по крону пинговать раз в 10минут

$host="тут_ip_юзера";

exec("ping -c 4 " . $host, $output, $result);

---------- Добавлено 15.07.2019 в 19:31 ----------

Итоговая идея.

Надо что то запустить в коде/документе через 10минут после входа в него юзера, чтобы продлить резерв до 30 минут. Если подскажете, буду очень признателен.

T7
На сайте с 19.09.2018
Offline
63
#17
postavkin:
$host="тут_ip_юзера";

😮

Вы так провайдера интернета будете пинговать.

timo-71:
xhr c сайта пишет timestamp


setInterval(
function(){
$.ajax({
type: "POST",
url: "/check_order_",
data: JSON.stringify({ last_event_fired:1563207948,order:[ {id:1,cnt:1},{id:102,cnt:12},{id:341,cnt:41} ] }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(res){ }
});
}, 60000)

С периодичностью в 60000 миллисекунд, сайт отправляет данные, а скрипт на сервере что то с ними делает. в last_event_fired можно положить временную метку какого либо действия ( mousemove, keypress или какое другое ).

P
На сайте с 06.01.2009
Offline
592
#18
timo-71:
😮
Вы так провайдера интернета будете пинговать.

timo-71, спасибо!

timo-71:
С периодичностью в 60000 миллисекунд, сайт отправляет данные, а скрипт на сервере что то с ними делает. в last_event_fired можно положить временную метку какого либо действия ( mousemove, keypress или какое другое ).

timo-71, а если страница статична, никаких действий юзер не производит?

Т.е. юзер открыл документ. Мне надо проверить, что через 10 минут документ мне может что то отдать обратно, тогда резерв продлевается до 30 минут, иначе не продлевается.

пс. кстати, может куками/сессией как то можно обойтись?

Пишем юзеру любую куки =1.

Черз 10 минут js запрашивает эту куки, если запрос успешен, то как то подключаемся к базе и прибавляем к времени резерва нужное кол-во времени. а? или это бред?)

T7
На сайте с 19.09.2018
Offline
63
#19
postavkin:
а если страница статична, никаких действий юзер не производит

success: function(res){ }

Внутри {} вы можете что то сделать, например алерт сказать после 8 минут, что через 2 минуты бронь будет снята, а это товар уже хотят купить 100500 человек. Алгоритм же простой ява скрипт посылает с сайта через заданный интервал времени какие то данные, в ответ получает данные с сервера и выполняет какие то действия. Т.е технически, примерно ясно. А конкретные действия (через 6 минут предупредить, с 9 минуты через минуту последнее китайское предупреждение, через 30 минут самое последнее, через сутки удалить ) уж точно не в разделе веб-строительства спрашивать. Может маркетологи какие подскажут?

postavkin:
Мне надо проверить, что через 10 минут документ мне может что то отдать обратно

А в чем проблема? Js присылает последнюю активность юзера

last_event_fired:1563207948
. Добавить к ней current_client_time:1563257948 и оттуда понять активен он или нет в последние х сек/мин, а сравнив реальное время запуска серверного скрипта чистильщика, не забыв о timezone можно понять что делать.

Три цифры (от балды, для понимания)

1563207948 последний раз мышка двинулась

1563257948 последний раз js прислал данные

1563457948 запустился крон и решает что делать.

postavkin:
Пишем юзеру любую куки =1. Черз 10 минут js запрашивает эту куки

А кто удалит эту куку?😂

P
На сайте с 06.01.2009
Offline
592
#20
timo-71:

А кто удалит эту куку?😂

Ну обычный юзер этого делать не будет, разве что кто то захочет "положить" наши продажи ))

Спасибо за советы.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий