Dmitry
Keystone обычная, хорошая CMS ничего особого там нет. Достаточно удобная
GG
Всем привет. Ребят подскажите по следующему вопросу:
Есть поиск, обращение к которому осуществляется через консольную команду, которую я в свою очередь вызываю с помощью shelljs.exec(), результат содержит список от 0 до 3 водителей. Создаю таймеры для каждого водителя, по истечению которого водителю отправляется сообщение по вебсокету о том, что пришёл новый заказ. Проблема в том, что клиентов, которые инициируют поиск, может быть несколько. И может произойти такая ситуация:
2 клиента которые находятся рядом инициируют поиск, и поиск находит одного и того же водителя. Но один и тот же водитель по логике не может получить сразу 2 сообщения одновременно.
Что я пробовал:
1. Использовать getset REDIS, и разрешал отправлять сообщение внутри таймера, только в том случае, если вернулось null, остальные таймеры где была отправка, просто обнулялись. (Решение не очень получилось как мне кажется)
2. Использовал флаг, что водитель учавствует в поиске, но и это тоже особо не помогло, т.к. сперва всё равно отрабатывает поиск, а уже потом из него вытаскивается id водителя, по которому ставится флаг в хранилище. Т.е. 2 запроса пришло, 2 поиска отработало. 1 поставил флаг, но второй то не знает об этом, поэтому нужен ещё один запрос сразу после поиска, что по сути тот же самый вариант.
Подскажите как можно это всё построить так чтобы не было race conditions и так далее.
Думаю все эти запросы сериализовать через сервер очередей. Но как при этом будет выглядеть решение — пока не вижу.
Просто. Используй. Бд. Как все. Нормальные люди
AlexMist
Программу для хоткеев под винду посоветуете? 😬
jstclmnm
всем привет!
подскажите, кто сталкивался с таким: при запуске js файла через node js в консоли выдает ошибку
"Попытка записи в несуществующий канал."
GG
Попробуй запустить чистый js файл)
Nurik
GG
Rem1te
Всем привет. Ребят подскажите по следующему вопросу:
Есть поиск, обращение к которому осуществляется через консольную команду, которую я в свою очередь вызываю с помощью shelljs.exec(), результат содержит список от 0 до 3 водителей. Создаю таймеры для каждого водителя, по истечению которого водителю отправляется сообщение по вебсокету о том, что пришёл новый заказ. Проблема в том, что клиентов, которые инициируют поиск, может быть несколько. И может произойти такая ситуация:
2 клиента которые находятся рядом инициируют поиск, и поиск находит одного и того же водителя. Но один и тот же водитель по логике не может получить сразу 2 сообщения одновременно.
Что я пробовал:
1. Использовать getset REDIS, и разрешал отправлять сообщение внутри таймера, только в том случае, если вернулось null, остальные таймеры где была отправка, просто обнулялись. (Решение не очень получилось как мне кажется)
2. Использовал флаг, что водитель учавствует в поиске, но и это тоже особо не помогло, т.к. сперва всё равно отрабатывает поиск, а уже потом из него вытаскивается id водителя, по которому ставится флаг в хранилище. Т.е. 2 запроса пришло, 2 поиска отработало. 1 поставил флаг, но второй то не знает об этом, поэтому нужен ещё один запрос сразу после поиска, что по сути тот же самый вариант.
Подскажите как можно это всё построить так чтобы не было race conditions и так далее.
Думаю все эти запросы сериализовать через сервер очередей. Но как при этом будет выглядеть решение — пока не вижу.
Проставлять флаг не когда ему ушло сообщение, а когда его выбрал поиск ?
Nurik
Хз, ты что-то через exec() пускаешь
Это поиск, консольная утилита, т.к. поиском пользуются так же другие сервисы. То что приходит в ответ я могу контроллировать только входными параметрами. А вот водители у меня в БД как и положено.
Nurik
Проставлять флаг не когда ему ушло сообщение, а когда его выбрал поиск ?
Да, я тоже так подумал изначально. Но получилось вот что:
2 клиента которые находятся рядом, делают 2 запроса и тогда 1-й получает список из 3 водителей , а второй не получает никого, при условии, что кроме этих трех водителей никого нет рядом. Я ХЗ насколько это правильно, возможно лучше вообще отказаться от идеи 3-х водителей, а лучше сразу по одному искать каждый раз.
Rem1te
Пошли в личку
Mikhail
Мужики поделитесть опытом? Какой API лучше юзать чтобы при вводе адреса показывались саджеты?
Yandex?
Michael
а адреса только российские?
Michael
зависит же от целевой аудитории: если мир, то google, если снг, то скорее яндекс, если упёрлись в ограничения первых или вторых, что-то на основе osm
Anton
если только российсике то можно еще посмотреть в сторону КЛАДР и ФИАС, и самому нагородить апи поверх этих данных
Mikhail
Такое нашел: https://dadata.ru/api/suggest/#request-address
Mikhail
Еще вопрос
кароче из клиента обращаюсь к api экспресса
нода запрос дальше шлет
как же мне отрубать предыдущие запросы если они станут не нужны?
Mikhail
batchRequests же про это?
Nurik
Ребят, подскажите как в express в sequelize убрать вывод запросов бд, определенных только, в консоли. ПРосто частые запросы сильно засоряют консоль.
Mikhail
Nurik
Я не знаю
Вы прям ответили так, как будто моё сообщение было запросом на сервер.)) Ахах.
Mikhail
Зато честно :)
Sergey
GG
GG
logging: false
Nurik
Но тогда оно вырубает вообще всё логирование. А мне как бы нужно вырубать логирование на уровне некоторых запросов.
Sergey
о ништяк
определить свою функцию logging
Sergey
Nurik
Nurik
GG
GG
кароче)
https://stackoverflow.com/questions/21427501/how-can-i-see-the-sql-generated-by-sequelize-js
Lev
Каким инструментом лучше всего парсить жсоны по таймеру? максимум что могу придумать это использование модуля request в бесконечном цикле
Aleksand
Lev
угу
Lev
нашел node-schedule
Lev
буду пробовать
Aleksand
Lev
я не очень умный
Таймураз
Что на ноде есть интересного с генерацией кода наподобие yii?
Roman
Aleksand
тут было как-то рубилово типа что выбрать для БД?
Олег Бартунов с бенчмарками посгреса против монги
https://youtu.be/WPxsppNZyzc?t=23057
Aleksand
по всем вариантам Postgres сильно лучше MongoDB
Ivan
Всем мир
Работаю в Digital Design middle web-developer'ом (это всё, куда можно js засунуть).
В этом я и специалист. Получаю удовольствие от разработки под react, страдаю от разработки под angular.
Люблю поговорить на околофронтендную тему, делиться опытом, убеждать людей в том, что пробелы, а не табы.
Сообщество интересно потому что ну а как иначе-то?
СПБ.
Про чат узнал из @javascript_jobs.
#whois
Aleksand
Konstantin
Гляну, но не с телефона. Может краткое резюме?
Dmitrii
тут недавно спрашивали про control-flow на подобии как в библиотеке async, только для async/await - вот интересный пакет https://www.npmjs.com/package/awaiting
Gleb
Dmitrii
есть вполне как аналог да
Dmitrii
там кстати в пакете есть описание почему нет
Дима
Having multiple, conflicting definitions of Promise in a codebase means you now have to check the capabilities of a given Promise before using it
Дима
Автор тупо не в курсе про смысл и существование Bluebird.try
Дима
Уж если и юзать замену промисам, то фьючерсы, а это полумеры какие-то
Sergey
Sergey
Дима
чет не вижу смысла тащить bluebird
Ну если у автора такая прооблема. Можно не тащить, Promise.try можно самому написать.
Его фича в том, что после него вся цепь вызовов будет обернута исключительно в начальный вариант
Дима
В отличии от обычного. Его либа это кстати не решает, а только мешает)
Sergey
Aleksand
Дима
я чет не понимаю твоей позиции
Ну вот автор жалуется что у него в проекте куча имплементаций промисов и каждый раз приходится тестить их на наличие фич. Я на это замечаю, что для его безнадёжного положения существует паттерн Promise.try и его аргумент не катит
Дима
Бтв, его апи через fluture спокойно и реализуется
Дима
Жирный плюс фьючерсов в том, что с их подходом асинхронные операции нормально типизируются, потому что Reject ветка имеет адекватный тип
Sergey
интересная штука
Sergey
но все равно на коллбэках
Дима
Как и промисы
Sergey
для промисов есть async/await
Дима
Ты думаешь с ними он не работает?)
Sergey
начал читать доку, пока не увидел
Sergey
нашел методы *P
Дима
В идеале это кстати вообще не должно требоваться) Потому что можно прозрачно заюзать с ними Maybe или Either
Sergey
пошел изучать... спасибо
Sergey
Sergey
только не пойму, почему .bimap принимает сначала reject, потом resolve
Sergey
да и .fork тоже