ventajas tipos servidor modelo evolucion elementos ejemplos desventajas definicion cliente caracteristicas capas arquitectura javascript node.js electron

javascript - modelo - tipos de arquitectura cliente servidor



¿Cuál es el modelo Cliente/Servidor cuando se usa Electron(Atom Shell)? (2)

Implementamos el servidor de nodoj totalmente funcional y la UI angular con sqlite3, secuencializar el ORM usando

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

Algunos de los proyectos nos ayudaron mucho:

  • Framework: https://github.com/angular-fullstack/generator-angular-fullstack Windows Packaging: electron-packager ":" github: electron-userland / electron-packager "
  • Creación de atajos y actualización automática: "electron-squirrel-startup": "^ 1.0.0",
  • Creación del instalador de versiones: "electron-winstaller": "^ 2.3.4",

Estoy tratando de entender cómo funciona Electron (anteriormente Atom Shell).

Vengo de una aplicación web tradicional, estilo MVC, donde un navegador llama una Acción del controlador a través de un Sistema de enrutamiento , el Controlador luego obtiene datos de una tienda (Sistema de archivos, Base de datos, ...) y muestra una Vista . que se envía de vuelta al navegador. Algunas acciones pueden enviar JSON en su lugar, ya que se llaman a través de JavaScript / AJAX en lugar de que el navegador navegue hacia ellas.

Quiero crear eso, pero como una aplicación de escritorio multiplataforma. Sé que Atom Shell combina un Chromium-Browser y un Node.js / v8 runtime, pero no estoy seguro de cómo se comunicarían.

Supongo que podría ejecutar un servidor web completo (básicamente, un middleware HTTP Node.js como Express ), pero eso crea un servidor accesible en la red (que también podría interferir con los firewalls) - una de las razones por las que quiero hacer un escritorio aplicación es precisamente para evitar ejecutar un servidor real. Básicamente me gusta el patrón MVP / MVVM en una aplicación de escritorio "normal".

¿Puede alguien darme algunos puntos de partida por lo que estoy tratando de hacer? ¿Cómo hablaría el navegador con el tiempo de ejecución del nodo (el "Cliente" como lo llaman?) Para decirle "Oye, busca mi registro con ID 12345" y el Cliente devolvería el HTML renderizado, o el navegador simplemente obtendría un blob de JSON y renderizarlo a través de un motor de plantillas JavaScript?


No parece que Electron use Node.js como un servidor web, sino simplemente como un entorno para ejecutar código JavaScript de fondo, este código puede usar módulos de nodo para acceder al sistema. Al mismo tiempo, Chromium proporciona una interfaz de usuario para la aplicación, que muestra páginas web regulares que ejecutan JavaScript habitual de espacio aislado. Ambos están siendo integrados por el ejecutable Electron, el primero directamente (Node.js se puede construir como una biblioteca estática), el último a través de libchromiumcontent . En cierto modo, Node.js es la parte del controlador de la aplicación, mientras que Chromium es la vista.

Normalmente, el concepto utilizado para las páginas web aquí es el de las aplicaciones de una sola página : una página web representa una ventana de aplicación y, como tal, permanece activa mientras esta ventana esté visible (a menudo durante toda la vida útil de la aplicación). Cuando necesita mostrar algo diferente, solicita datos del código de fondo que se ejecuta en Node.js, al igual que las aplicaciones AJAX solicitan datos del servidor. La página en sí misma no se recarga, por lo general, se utilizará la plantilla de JavaScript para actualizar los contenidos.

En realidad, no existe una relación servidor / cliente; sin embargo, la comunicación puede funcionar en ambos sentidos. Ambos lados pueden usar el módulo ipc para enviarse mensajes entre ellos ( proceso principal , renderer ). Estos mensajes pueden tener cualquier argumento adjunto, estos no necesitan ser codificados explícitamente (típicamente esto se implementa usando JSON internamente para codificar parámetros, no verifiqué si ese es el caso con Electron). Internamente, ese mensaje que pasa se implementa a través de mecanismos de IPC específicos de la plataforma, usando libuv para ser exactos.