Какова модель Client/Server при использовании Electron (Atom Shell)?

Я пытаюсь оборачивать голову тем, как работает Electron (ранее Atom Shell).

Я прихожу из традиционного веб-приложения в стиле MVC, где браузер вызывает действие контроллера через систему маршрутизации, затем контроллер извлекает данные из хранилища (Файловая система, База данных...) и отображает вид, который отправляется обратно в браузер. Некоторые действия могут отправлять JSON вместо этого, поскольку они вызываются через JavaScript/AJAX вместо того, чтобы браузер фактически переходил к ним.

Я хочу создать это, но как кросс-платформенное настольное приложение. Я знаю, что Atom Shell сочетает в себе как Chromium-Browser, так и Node.js/v8, но я не уверен, как они будут общаться.

Я предполагаю, что я мог бы запустить полный веб-сервер (в основном, некоторые Node.js HTTP Middleware, такие как Express), но это создает сетевое соединение, (что также может привести к отключению брандмауэров) - одна из причин, по которой я хочу создать настольное приложение, - это именно то, чтобы избежать запуска реального сервера. В принципе, как шаблон MVP/MVVM в обычном рабочем приложении.

Может кто-нибудь дать мне несколько отправных точек для того, что я пытаюсь сделать? Как браузер будет говорить со временем выполнения node ( "Клиент", как они его называют?), Чтобы сказать "Эй, возьмите мою запись с ID 12345" и вернет ли клиент визуализированный HTML или будет только браузер капли JSON назад и визуализировать его с помощью механизма шаблонов JavaScript?

Ответ 1

Электрон не использует Node.js в качестве веб-сервера, а просто как среду для запуска кода фона JavaScript, этот код может использовать модули node для доступа к системе. В то же время Chromium предоставляет пользовательский интерфейс для приложения, он отображает обычные веб-страницы, которые запускают обычный песочный JavaScript. Оба встроены в исполняемый файл Electron, первый непосредственно (Node.js может быть создан как статическая библиотека), а второй - через libchromiumcontent. В некотором смысле Node.js является частью контроллера приложения, тогда как Chromium - это вид.

Как правило, понятие, используемое для веб-страниц, относится к одностраничным приложениям: веб-страница представляет собой одно окно приложения и, как таковое, остается до тех пор, пока это окно видно (часто на протяжении всего срока службы приложения). Всякий раз, когда ему нужно отображать что-то другое, он запрашивает данные из фонового кода, запущенного в Node.js, так же, как приложения AJAX запрашивают данные с сервера. Сама страница не перезагружается, обычно JavaScript-шаблон будет использоваться для обновления содержимого.

Однако на самом деле отношения между сервером и клиентом на самом деле не связаны, и общение действительно может идти в обоих направлениях. Обе стороны могут использовать модуль ipc для отправки сообщений друг другу (основной процесс, renderer). Эти сообщения могут иметь любые аргументы, связанные с ними, они не обязательно должны быть закодированы явно (как правило, это реализовано с помощью JSON для внутреннего кодирования параметров, я не проверял, имеет ли это случай с Electron). Внутри эта передача сообщений реализуется с помощью механизмов libuv.

Ответ 2

Мы реализовали полностью функциональный nodejs-сервер и angular пользовательский интерфейс с sqlite3, секвестрируйте ORM, используя

*. https://github.com/theallmightyjohnmanning/electron-express

Некоторые из проектов помогли нам:

  • Рамка: https://github.com/angular-fullstack/generator-angular-fullstack Windows Packaging: электрон-упаковщик ":" github: электронно-пользовательский/электронный-упаковщик "
  • Создание ярлыков и автоматическое обновление: "электрон-squirrel-startup": "^ 1.0.0",
  • Создание установщика выпуска: "электрон-winstaller": "^ 2.3.4",