#node.js #express #asynchronous #socket.io
#node.js #экспресс #асинхронный #socket.io
Вопрос:
Я отвечаю за улучшение внутреннего программного стека, который использует express, node.js, и socket.io
Есть несколько конечных точек REST, а также обратные вызовы. Они срабатывают, когда кто-то отправляет данные через сокет.io с интерфейса. Как конечные точки, так и сокет.обратные вызовы ввода-вывода объявляются как асинхронные, так как они вызывают многие функции с ожиданием:
Примеры:
static async someEndpoint(req: Request, res: Response, next: NextFunction): Promiselt;anygt; { ... code which calls functions with await }
client.on("some-socket", async (data, callback) =gt; { ... code which calls functions with await }
Хотя они объявлены как асинхронные, я хочу, чтобы эти функции выполнялись взаимоисключающе, чтобы в любой момент времени выполнялась только одна конечная точка express или один обратный вызов сокета. Я думал, что и конечные точки, и обратные вызовы обрабатываются последовательно циклом событий узла, даже если они объявлены как асинхронные.
Но теперь я увидел, что бывают ситуации, когда одновременно выполняются два обратных вызова сокетов. По крайней мере, я почти уверен, что они это делают 😉
Итак, что я могу сделать, чтобы улучшить эту ситуацию? Я уже защитил некоторые асинхронные части своего кода с помощью мьютекса, нужно ли мне делать это и здесь?
Если вам нужна дополнительная информация, я, конечно, предоставлю ее.
Большое спасибо за ваши ответы! Я уже искал переполнение стека, но пока не смог найти ответа.
С уважением
Майкл
Комментарии:
1. предполагая, что вам нужна эксклюзивность, тогда да, вам понадобится мьютекс или аналогичный метод (одноэлементный класс и т. Д.) Для обработки потока управления.
2. вероятно, вы могли бы также создать решение на основе обещаний для этого, в зависимости от того, как на самом деле работает ваш поток кода…