Sockets: Question générale (pas seulement Ruby)

Sockets: Question générale (pas seulement Ruby) - Ruby/Rails - Programmation

Marsh Posté le 23-08-2013 à 10:23:54    

Hello  :hello:  
 
Imaginons, j'ai une socket qui lit les données d'un serveur, chaque message se termine par \n.
Dans ma boucle principale, j'utilise select pour savoir si je peux lire ou pas sur la socket.

Code :
  1. IO.select([@socket], nil, nil, timeout)


Juste pour être certain, vaut il mieux utiliser read_nonblock(SIZE) plutôt que gets?
C'est plus efficace de lire ligne par ligne ou de récupérer un flot de données et extraire les messages en fonction du délimiteur \n.
 
 
Idem pour écrire, j'ai un buffer et j'écris ce que je peux avec write_nonblock(data).

Code :
  1. ...
  2. @buffer = ["plein\n", "de\n", "messages\n", "...\n"]
  3. s = @buffer.shift or ''
  4. while s[0] and @buffer[0]
  5.   if (s.size + @buffer[0].size) > 400
  6.     # Test longueur du message.
  7.     break
  8.   end
  9.   s << @buffer.shift
  10. end
  11. until s.empty?
  12.   size = @socket.write_nonblock(s)
  13.   s.slice!(0, size)
  14. end


Sinon j'arrive pas à regrouper ce bout de code en une seule loop (while, until, loop), une idée?

Reply

Marsh Posté le 23-08-2013 à 10:23:54   

Reply

Marsh Posté le 27-08-2013 à 20:01:46    

:bounce:


Message édité par Profil supprimé le 28-08-2013 à 06:16:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed