Как заблокировать критические участки кода в Node / Express с помощью Typescript - PullRequest
0 голосов
/ 15 мая 2018

Я немного новичок в мире JavaScript / Typescript / Node / Express, но из моих исследований пока не существует «приемлемого» способа блокировки критических участков кода в приложении Node / Express.,Я сталкивался с парой пакетов NPM (async-lock, await-lock, rwlock), но все они имеют удивительно низкое количество загрузок / недель и выглядят так, как будто они не очень хорошо поддерживаются (в том смысле, что их последние публикациистарые, или официальный сопровождающий прямо говорит, что он не поддерживает его активно).Кажется, ни у кого нет определений TypeScript (по крайней мере, насколько я могу судить).И, что наиболее проблематично, ни один из них, похоже, не имеет много с точки зрения документации (кроме пары примеров, чтобы показать использование в общем случае).Я видел здесь несколько вопросов, где люди писали свои собственные (часто активные опросы) блокировки (которые кажутся неоптимальными) или предлагали использовать БД для блокировки (что похоже на тяжелое решение для облегченной проблемы).async-lock кажется самым популярным из них (количество загрузок), но я немного опасаюсь зависеть от того, за что владелец не несет большой ответственности (а документы довольно тонкие).

Мой вариант использования выглядит довольно простым.Я строю REST-сервер, и у объектов есть некоторые взаимозависимости.Так, например, если кто-то обновляет FOO, а FOO имеют ссылки на BAR, то я бы хотел заблокировать мой критический раздел на «FOO» и «BAR», а затем получить старый FOO, любые связанные BAR, проверить правильностьобновить и записать новый FOO обратно в БД - после чего я бы снял блокировки 'FOO' и 'BAR'.

Так что мой вопрос таков - для простой блокировки критических секций в TypeScript (поддержка несколькиходновременные блокировки / ключи), какова стандартная практика / API / пакет?

Это приложение с одним сервером / одной БД, поэтому нет необходимости в распределенных блокировках - просто пытаюсь разобраться с тем фактом, чтонесколько запросов обрабатываются одновременно из-за «переключения потоков» при асинхронном вводе-выводе.

1 Ответ

0 голосов
/ 15 мая 2018

Нет такой встроенной функциональности в Node.js.Пользователь может использовать сторонние библиотеки или разработать собственное решение.

async-lock, самый первый пакет, который вы перечислили, имеет значительную статистику загрузки , определения TypeScript и поддерживается .

Хотя многие небольшие пакеты утилит NPM могут не обновляться годами, потому что они никогда не нуждаются в этом - и если они вообще нуждаются, они достаточно простыбыть разветвленным, модифицированным и опционально PRed.

Это приложение с одним сервером / одной БД, поэтому нет необходимости в распределенных блокировках - просто пытаются справиться с тем фактом, что выполняется несколько запросовобрабатывается одновременно из-за «переключения потоков» при асинхронном вводе-выводе.

Тогда, вероятно, это хороший пример использования блокировок в памяти Node.js, которые не нужно хранить в базе данных или файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...