Задать вопрос
@RoflanDaniil

Как мне связать приложение node.js и си (its not a node addons)?

Я хочу написать приложение, которое выполняет достаточно сложные вычисления (обработку очень больших строк) и как известно Node.js для этого не подходит совсем. Поэтому я напишу работу со строками на чистом си, а middleware, работу с бд и другое на js. Си программа будет получать на вход текст и отдавать обработанный текст. Программа будет иметь один поток выполнения ибо алгоритм не параллельный.
Не знаю как мне передать данные в си программу и получить результат в js, причем так, чтобы выполнение Си программы было асинхронным для js. Нормально ли с точки зрения производительности, что си программа будет вызываться на каждый запрос к серверу ноды ? Я думаю, что вызов программы не самая быстрая операция и нужно сделать процесс ее выполнения долгоживущим как процесс ноды.(как?)
И плюс это как то должно работать если процессов ноды будет к примеру 30% а си 70%.
Предполагаю, что есть какой ниб софт для этих целей, но мне больше интересно как это сделать самому.
OC - unix
  • Вопрос задан
  • 684 просмотра
Подписаться 3 Простой 1 комментарий
Решения вопроса 1
@asd111
В вашем случае хорошо подойдет паттерн producer/consumer. Это когда одни приложения(producer'ы) создают данные для обработки и добавляют их в очередь, а другие приложения(consumer'ы) берут данные из очереди и обрабатывают их.
Можно взять RabbitMQ(https://www.rabbitmq.com/tutorials/tutorial-two-py... или другую очередь.

В целом в вашем случае приложение будет работать так:
1. Js отправляет строки для обработки в очередь "На Обработку".
2. Приложения на С забирают строки из очереди "На обработку".
3. Приложение на С обработало строку и отправило её в очередь "Готовое".
4. Забираем данные из очереди "Готовое" и делаем что нам нужно.
Если вам не нужно получать доступ к готовым строкам откуда то кроме С, то шаги 3-4 можно убрать.

При таком подходе можно использовать много приложений на С.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы