IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Quelle est la bonne pratique de programmation?


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut Quelle est la bonne pratique de programmation?
    Bonjour,

    j'ai du mal à visualiser l'architecture que prendra mon projet. Je fais de la VOIP.

    J'ai un serveur VOIP qui peut recevoir et initier des appels, un front qui permet à un utilisateur de lancer un appel et une servlet pour répondre au front et demander au serveur VOIP d'initier un appel. Jusque là tout fonctionne

    Nom : 1.png
Affichages : 148
Taille : 7,0 Ko

    Maintenant j'aimerais pouvoir notifier le front lorsque l'utilisateur est appelé par l'un de ses clients. Pour l'instant, j'ai écrit un programme qui se connecte à mon serveur VOIP et qui, dès que mon utilisateur reçoit un appel, affiche dans la console la fiche du client (je compare le numéro de l'appelant avec les numéros de mes clients présents en DB).

    La prochaine étape sera d'envoyer la fiche client au frontend. Je pense utiliser des sockets pour pouvoir notifier mon frontend. Mais comment faire pour que mon back à la fois écoute le front (si l'utilisateur veut passer un appel) et le serveur VOIP (si un appel survient et qu'il faut prévenir le front) ?

    Nom : 2.png
Affichages : 153
Taille : 7,4 Ko

    Devrais-je faire du multi-threading ou bien faire deux applications en back (une qui écoute le front et l'autre le serveur VOIP) et les faire communiquer entre elles également via des sockets ou y a-t-il une meilleure solution ?

    Merci d'avance,

    OoTsun.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il faut forcément quelque chose d'automatique ?
    L'utilisateur ne pourrait-il pas cliquer sur un bouton "fiche client" lorsqu'il est en ligne ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Oui, il faut que ça soit automatique. Si l'utilisateur est droitier, il tiendra son téléphone dans la main droite et devra donc faire une manipulation pas très "user-friendly" pour prendre sa souris et clique sur "voir fiche client". D'autant qu'il peut ainsi laisser le téléphone sonner 15 sec pour vite lire les infos importantes comme le nom, les dernières commandes, etc

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Une autre possibilité : le front fait un check toutes les secondes pour savoir s'il doit se mettre à jour.
    Combien as-tu de clients au maximum ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    Pour les notifications client en "temps réel", il y a plusieurs possibilités:

    -polling, long polling
    -websocket
    -server-sent events

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Merci pour vos propositions, en cherchant par moi-même je pense avoir trouvé la bonne architecture et j'ai commencé à l'implémenter. J'utilise des sockets et du multi-threading.

    Pour la partie "Notifier l'utilisateur lorsqu'il reçoit un appel", j'ai :
    -Une classe contenant deux Hashtable. Le premier est <Numéro d'un utilisateur, Son socket> et le deuxième est <Numéro d'un utilisateur, Numéro du client en train de l'appeler>.
    -Un main lançant deux Thread (dont le constructeur demande un objet de la première classe, cet objet sera donc partagé!).
    1. Ecoute le serveur VOIP. Dès qu'un appel entrant est détecté, place une nouvelle entrée dans la 2ème table.
    2. Joue le rôle de serveur. Lance lui aussi deux threads.
      1. Le premier écoute les connexions entrantes via la classe ServerSocket. Lorsqu'un utilisateur (frontend) essaye de se connecter, accept() et écoute une fois. En effet, l'utilisateur enverra son numéro de téléphone après s'être connecté. Le thread rajoute ensuite dans la première table cette nouvelle entrée (le numéro du nouvel utilisateur et le socket associé).
      2. Le second, lui, ne fait que regarder si la deuxième table contient quelque chose. Si elle n'est pas vide, ça signifie qu'un (ou plusieurs) appel vient d'arriver. Il faut notifier le client! Il utilise donc la première table pour envoyer un message au client puis remove() l'entrée.


    Je crois que ça n'est pas très optimisé ("Le second, lui, ne fait que regarder si la deuxième table contient quelque chose.[...]" --> boucle infinie qui utilise des ressources CPU pour rien la plupart du temps). J'améliorai le projet lorsque ça fonctionnera

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/09/2015, 09h45
  2. Quelle est la bonne pratique pour accéder optimalement à un membre d'un array?
    Par billybobbonnet dans le forum Développement Windows
    Réponses: 4
    Dernier message: 01/09/2014, 14h13
  3. Réponses: 1
    Dernier message: 19/03/2013, 11h19
  4. Réponses: 5
    Dernier message: 08/04/2011, 10h55
  5. Quelle est la bonne pratique
    Par sam01 dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2010, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo