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

Entrée/Sortie Java Discussion :

Protobuf RCP Socket


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut Protobuf RCP Socket
    Bonjour,

    je réalise un projet, où je dois utiliser protobuf sur Eclipse. Mon projet consiste à créer un serveur et un client sur deux machines différentes(sur le même réseau) toutes les deux avec Eclipse, et à les faire communiquer grâce aux classes générées par protobuf.

    Dans un premier temps j'ai réalisé le programme AddressProto, qui créé un objet, le sérialise (ce qui créé un nouveau fichier), le dé-sérialise, et l'affiche.
    https://developers.google.com/protoc...s/javatutorial


    A présent je souhaiterai créer une communication RCP entre le serveur et le client, grâce à protobuf. J'ai pu lire qu'il existait ce qu'on appel le service, mais je n'ai trouvé aucun exemple l'utilisant. Le but de cela est de créer une communication, du coté serveur sérialiser des données, les envoyer sur le client et les dé-sérialiser afin de les afficher.

    Service(protobuf):
    service Foo {
    rpc Bar(FooRequest) returns(FooResponse);
    }


    Dans le cas où la communication et l'envoie de données n'était pas possible via protobuf, j'ai quand même réussi à réaliser cela grâce aux classes proposé par java.


    Je vous remercie d'avance si vous pouvez m'aider à réaliser cette communication.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Dude, les protobufs ne sont que des séquences d'octets normales et autosuffisantes, comme le prouve le fait que tu as pu en sérialiser un dans un fichier, puis le désérialiser.

    L'idée est de les envoyer normalement dans des Socket normales, ou dans n'importe quel autre flux d'octets qui te chante.
    Tu as trouvé tout seul comment faire, parfait. C'est ce qu'il fallait.

    (Je ne dis pas qu'il n'existe pas de bibliothèques exposant l'échange de protobufs comme un service. Je dis qu'elles ne serviraient pas à grand-chose si elles existaient.)

    Edit : je me trompe en fait. De telles bibliothèques sont très utiles dans le cas d'échange de données massives en mode non-bloquant. Il est vrai que c'était tout de même un point fort du format, au départ.
    ... Mais encore faut-il échanger des données massives en mode non-bloquant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    En effet je ne post pas pour exprimer mes résultats, mais plutot pour trouver de nouvelles solutions ^^

    L'avantage d'utiliser Protobuf, c'est le gain de temps pour l'envoi de données.

    Donc si j'ai bien compris, je dois établir une connexion non bloquante en java. Puis établir un service protobuf qui permettrait l'envoi de données massives. Si quelqu'un à déjà travaillé sur un programme utilisant ce service, je suis preneur! Cela m'aiderai beaucoup pour comprendre, vu qu'il n'y a pas grand chose sur internet à ce sujet (je continue mes recherches).

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par alaska90 Voir le message
    L'avantage d'utiliser Protobuf, c'est le gain de temps pour l'envoi de données.
    Ouais enfin y en avait d'autres avant lui, hein. Notamment la sérialisation Java, si t'es en Java des deux côtés.

    Les protobufs permettent d'autres trucs que les autres ne permettaient pas, notamment l'extensibilité pas trop loin du XML, et l'accès fin aux données atomique à mesure qu'on les lit.

    Citation Envoyé par alaska90 Voir le message
    Donc si j'ai bien compris, je dois établir une connexion non bloquante en java. Puis établir un service protobuf qui permettrait l'envoi de données massives.
    What? Non, je dis juste que sauf dans le cas très particulier où tu as beaucoup de données à envoyer et que tu veux le faire en mode non-bloquant, une bibliothèque ou des services ne servent à rien. Il suffit d'écrire dans une Socket ou de lire depuis une Socket. Elle va te servir à quoi ta jolie bibliothèque qui dialogue sous forme de services ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Dans un second temps, je devrait à partir d'une base de donnée sur la partie serveur, les sélectionner, les sérialiser et les envoyer sur le client. Je n'ai pas encore assez creusé le sujet, mais je compte me diriger vers une base de donnée MySQL géré par le plugin Quantum ou JFaceDbc (toujours sur Eclipse).

    OK! Je vais tester l'envoi de fichier (données sérialisées) par les sockets.

    Effectivement l'envoi de Fichier par protobuf n'était pas vraiment utile, j'ai donc continué à travailler sur l'envoi de fichiers avec les classe Java. Cela marche trés bien avec un fichier normal, mais pas avec un fichier sérialisé par les classes protobuf.

    exemple résultat sérialisation : aze

    Je pense que cela ne marche pas à cause de mes OS (client => Windows7, serveur => Ubuntu). Est il possible qu'ils ne comprennent pas ces caractères de la même manière?

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. raw socket et langage c
    Par SlayDave dans le forum Développement
    Réponses: 2
    Dernier message: 29/08/2002, 19h09
  3. socket
    Par ben91 dans le forum Développement
    Réponses: 5
    Dernier message: 13/08/2002, 11h04
  4. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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