Встраивание Node.js в Python
Я смотрю на вариант встраивания node.js в python, чтобы добавить функциональность node.js в мой существующий код на python. Я знаю, что это можно сделать наоборот, как описано в этом посте. Однако я хочу сохранить как можно большую часть существующего проекта Python, что означает, что он позволяет Python управлять выполнением.
PyV8 делает практически все, что я хочу, за исключением предоставления среды, подобной node.js, которая позволила бы мне использовать модули node.js в PyV8, так что это кажется хорошей отправной точкой.
Предоставляет ли node.js внешний API-интерфейс, аналогичный V8, чтобы можно было изменить PyV8 для переноса node.js? Если нет, есть ли способ загрузить среду node.js в PyV8, чтобы я мог использовать модули node.js?
Спасибо!
2 ответа
То, что вы хотите сделать, не поддерживается. В отличие от, скажем, интерпретатора CPython или даже интерпретатора JavaScript V8, Node.js не был предназначен для встраивания, не имеет интерфейса для этого и не имеет серьезных планов по изменению этого.
Я не могу найти официальную документацию по этому вопросу, но существует множество подобных тем, которые предоставляют соответствующую информацию.
Но это не значит, что это невозможно. Верхний слой Node не так уж и сложен, и на самом деле вам просто нужно исправить несколько его частей, чтобы сделать разные вещи. И, на самом деле, люди пытались сделать именно это, в таких проектах, как tacnode
, Я не знаю, готовы ли какие-либо из них к прайм-тайму или нет, но, возможно, стоит взглянуть на них, особенно если вы готовы и можете внести свой вклад, если они неполные.
Конечно, это только встраивает вас в C или C++; вам все еще нужно встраивать в Python. Но перенос разделяемой библиотеки C, чтобы вы могли использовать ее в Python (ну, CPython и PyPy), является давно решенной проблемой; Python имеет модули расширения с самого начала, а также ctypes
а также cffi
если вы не хотите писать какой-либо C-код. А есть сторонние проекты, такие как Cython, позволяющие вам написать почти-Python-код, который напрямую вызывает вашу разделяемую библиотеку, как если бы она была родной C, и компилируется в модуль расширения Python.
Таким образом, это почти наверняка выполнимо, но, вероятно, не будет тривиальным или упакованным и готовым к выходу из коробки.
Не вставлять. Вместо этого используйте Python и Node в двух разных процессах и общайтесь между ними. RabbitMQ в качестве примера имеет клиентов как для Node, так и для Python.