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

Ruby Discussion :

[TCPServer] Un Thread par connexion ?


Sujet :

Ruby

  1. #1
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut [TCPServer] Un Thread par connexion ?
    Salut !
    je fait un projet de serveur MUD entierement ecrit en ruby ,
    mais je ne sait pas comment faire pour avoir un thread par connexion histoire de pas tout bloquer , pour le moment j'ai fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    require 'socket'
     
    puts "Lecture du fichier de configuration..."
    require 'conf.rb'
    require "lib/Logger.rb"
    require "lib/Welcome.rb"
    require "lib/Com.rb"
     
     
    Logs = Logger.new("server.log",true)
    Logs.write("Activation du serveur sur le port #{$PORT}")
    server = TCPServer.new($HOSTNAME, $PORT)
    while (session = server.accept)
      playerThread = Thread.new do
          com = Com.new(session)
          com.send("Bienvenu sur le serveur iShard")
          com.send("version actuel : 0.1a")
          a = com.question("Quel est votre nom ?")
          puts a
        end
        playerThread.join
    end
    mais ca ne marche pas
    comment faire ?
    voila la source complete : http://kedare.free.fr/Dist/iShard.tar.bz2
    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par kedare
    Salut !
    je fait un projet de serveur MUD entierement ecrit en ruby ,
    mais je ne sait pas comment faire pour avoir un thread par connexion histoire de pas tout bloquer , pour le moment j'ai fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    require 'socket'
     
    puts "Lecture du fichier de configuration..."
    require 'conf.rb'
    require "lib/Logger.rb"
    require "lib/Welcome.rb"
    require "lib/Com.rb"
     
     
    Logs = Logger.new("server.log",true)
    Logs.write("Activation du serveur sur le port #{$PORT}")
    server = TCPServer.new($HOSTNAME, $PORT)
    while (session = server.accept)
      playerThread = Thread.new do
          com = Com.new(session)
          com.send("Bienvenu sur le serveur iShard")
          com.send("version actuel : 0.1a")
          a = com.question("Quel est votre nom ?")
          puts a
        end
        playerThread.join
    end
    mais ca ne marche pas
    comment faire ?
    voila la source complete : http://kedare.free.fr/Dist/iShard.tar.bz2
    merci
    si vous faites un playerThread.join dans le while cela revient à sérialiser les requêtes faites par les clients puisqu'un nouveau client ne peut se connecter tant que la communication avec le précédent n'est pas terminée…

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut, je fais un MUD français, et en ruby aussi!
    J'utilise ni fork ni thread, mais la function Kernel#select qui traite un tableau de socket permettant de gérer toutes les connections sans diviser le processus. C'est idéal, comme ça le serveur fait les choses une à une. S'il reçoit 12 commandes en même temps, il les traite à la suite les unes des autres.

    Si ça t'intéresse, http://vds-930856.amen-pro.com/mud_temp.txt

    Si tu veux toujours faire un mud (je suppose que c'est passé depuis 2006 mais on sait jamais), peut-être pourrais-tu faire partie des créateurs sur le mien, faut voir...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2006, 13h32
  2. Réponses: 2
    Dernier message: 24/07/2006, 17h58
  3. [VB6]Envoi de données par connexion WiFi
    Par Valeriegerard dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/05/2006, 18h18
  4. [Upload] upload d'image par connexion ftp
    Par pimpmyride dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2006, 00h52

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