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 :
- 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 :
- ...
- @buffer = ["plein\n", "de\n", "messages\n", "...\n"]
- s = @buffer.shift or ''
- while s[0] and @buffer[0]
- if (s.size + @buffer[0].size) > 400
- # Test longueur du message.
- break
- end
- s << @buffer.shift
- end
- until s.empty?
- size = @socket.write_nonblock(s)
- s.slice!(0, size)
- end
|
Sinon j'arrive pas à regrouper ce bout de code en une seule loop (while, until, loop), une idée?