Communication entre processus entre une application Java et un serveur local

Tout d’abord à tous les PROGRAMMERS [Today = Programmers day :)]

Deuxièmement, je travaille sur un projet où les spécifications nécessitent l’utilisation d’un serveur en tant que serveur frontal et d’une application en arrière-plan. Le projet est un système avancé de maison intelligente . Le serveur gérera les commandes provenant du client via Internet (disons comme une télécommande depuis l’extérieur de la maison) et les enverra (via un canal de communication) à l’application (en prévoyant d’utiliser l’application JAVA) qui gérera la logique principale comme le contrôle du matériel (lumières …), la lecture d’un microphone (micro local) et l’access à une firebase database pour agir comme un système de reconnaissance vocale (hors ligne).

Maintenant, je suis encore en phase de planification et je ne sais pas quelles technologies sont les meilleures pour ce projet. Je pense utiliser Node.js ou Apache comme serveur et une application JAVA comme back-end et toute base de données SQL pour le SRS de l’application.

J’espère que cette illustration montre clairement comment le système fonctionne:

entrer la description de l'image ici

La question principale est:

Quelle est la meilleure façon de faire en sorte que l’application Java communique avec le serveur (le canal de communication [doit être bidirectionnel])?

et recommandez-vous un serveur spécifique autre que ceux mentionnés pour ce travail?

Ce qui m’a traversé l’esprit jusqu’à présent:

1- JSP et servlets (rendre le serveur aussi l’application). Mais je ne veux pas qu’un serveur gère les données hors connexion et je ne suis pas sûr que les servlets Java puissent accéder à l’interface matérielle. Je souhaite également que le serveur soit distinct des décisions critiques (couche différente pour des raisons de sécurité et ne sera pas utilisée aussi souvent que le système local).

2- canal de communication:

A- Un fichier partagé , mais c’est une mauvaise idée car je ne veux pas que l’application vérifie si le contenu du fichier a changé (commande reçue) ou pas de temps en temps (opérations excessives).

B- Une communication inter-processus à travers un port ( communication par socket ) semble la meilleure solution mais je ne sais pas comment cela se produirait en termes de coût de fonctionnement et d’erreurs de communication.

Système d’exploitation utilisé: Linux Raspbian

MODIFIER:

Je suis sûr que ZMQ + Apache est suffisant pour cette tâche, mais comment se compare-t-il à WebServices (comme SOAP)? WebServices serait-il une meilleure solution en termes d’implémentation standard et de sécurité?

Toutes les suggestions connexes sont les bienvenues, TQ

ZeroMQ est idéal pour les communications internes ou toute autre solution de communication similaire.

Pour votre cas particulier, je peux voir que ZeroMQ serait le meilleur ajustement.
Les raisons:

  • Votre serveur hors ligne doit être indépendant de la solution Web.
  • La communication peut être fiable et bidirectionnelle, éventuellement avec un autre modèle (pub> sub, req <> res, etc.).
  • Le redémarrage de l’un des côtés ne nécessiterait pas de redémarrer les sockets (connexion) de l’autre côté, car les messages sont mis en queue.
  • Possibilité d’évoluer non seulement sur le même matériel, mais aussi sur le réseau local ou même sur Internet.
  • Grande communauté de soutien. Cela peut sembler un peu difficile à comprendre, mais en réalité, c’est simple, il suffit d’aller dans les exemples et, une fois le concept compris, il est très facile de travailler avec.
  • ZeroMQ a beaucoup de pilotes pour la plupart des langages populaires, y compris Java et Node.js.

Considérations:

  • Vous devez penser aux paquets et les données seront envoyées. Ainsi, certains protocoles de données populaires tels que XML ou JSON sont une bonne façon de penser.
  • Responsabilités sur différents services – assurez-vous qu’ils ne sont pas trop dépendants les uns des autres. Ou si le serveur hors ligne principal – est un kernel de système, assurez-vous qu’il ne dépend pas du service Web, de sorte que la face Web puisse être supprimée / remplacée / améliorée, etc.

Quelques points supplémentaires à considérer :
Pourquoi Java et qu’en est-il de l’approche modulaire? Par exemple, si vous souhaitez étendre et étendre votre activité – append plus de capteurs dans les solutions de maison intelligente, une seule application géante nécessiterait de la changer, il est donc plus difficile de maintenir et de maintenir différents clients avec leurs propres besoins. Pensez de manière modulaire – certaines fonctionnalités essentielles pour les fonctionnalités hors ligne, mais de nombreux processus d’agrégation communiquent avec différents capteurs. Cela facilite la prise en charge de différentes configurations et environnements, tout en maintenant le système dans son ensemble en améliorant les composants indépendants.