Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 08 Feb 2012, 11:14 
Offline
Nuby

Registriert: 08 Feb 2012, 11:03
Beiträge: 9
Gibt es eine Möglichkeit mehrere TCP Verbindungen über einen einzigen Thread zu verarbeiten ohne das eine Verbindung die anderen blockiert?

Ich kenne dazu nur das Multithreading Beispiel:


1
2
3
4
5
6
7
8
9
10
require 'thread'
require 'socket'
Port = 1111
server = TCPServer.open(Port)
loop {
Thread.start(server.accept) do |socket|
socket.puts "Hallo, Welt!"
socket.close
end
}


Das mag für kleine Anwendungen gut sein aber bei vielen Verbindungen gilt es doch als schlechte Architektur wenn hunderte oder tausende von Threads entstehen.


Zuletzt geändert von Lightstorm am 24 Feb 2012, 05:35, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
BeitragVerfasst: 08 Feb 2012, 12:31 
Offline
Rubyist

Registriert: 09 Jun 2009, 18:00
Beiträge: 323
Lightstorm hat geschrieben:
Gibt es eine Möglichkeit mehrere TCP Verbindungen über einen einzigen Thread zu verarbeiten ohne das eine Verbindung die anderen blockiert?


Async bzw. nonblocking IO wäre das Stichwort nach dem du suchen musst. Eventmachine kann das z.B.

Lightstorm hat geschrieben:
Das mag für kleine Anwendungen gut sein aber bei vielen Verbindungen gilt es doch als schlechte Architektur wenn hunderte oder tausende von Threads entstehen.


Nun, das ist eine Diskussion die eigentlich nicht so wirklich durch ist. Das hängt vom Use-Case ab. Wenn auf allen Verbindungen was passiert ist die Multi-Threaded-Variante wahrscheinlich sogar effizienter, insbesondere z.B. unter einer Runtime die Threads sehr effizient implementiert wie z.B. JRuby. Ein Thread braucht halt Ressourcen wenn er existiert, aber der Overhead ist seit geraumer Zeit signifikant gesunken.

Generell beachten solltest du dass du für jede TCP-Verbindung einen offenen Socket brauchst und damit schnell an andere Betriebssystemlimits kommst (Open files z.B.), aber da hilft dir auch nonblocking IO nicht weiter.

_________________
Ruhe jetzt, sonst hol ich meinen kleinen Bruder.


Nach oben
 Profil  
 
BeitragVerfasst: 22 Feb 2012, 10:13 
Offline
Nuby

Registriert: 08 Feb 2012, 11:03
Beiträge: 9
Danke, habe das mit eventmachine gelöst, klappt wunderbar :)


Nach oben
 Profil  
 
BeitragVerfasst: 22 Feb 2012, 22:54 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1412
Wohnort: NRW → UN
Lightstorm hat geschrieben:
Danke, habe das mit eventmachine gelöst, klappt wunderbar :)

Kannst du dann noch deinen ersten Beitrag bearbeiten und ein "[gelöst]" in den Titel machen? Dann sieht man von außen leichter, dass das Thema zur Zufriedenheit aller abgehakt wurde. :)

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Mein Blog | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: BF3A 614B D62B A4A0 C292 141C B875 5CB1 C592 A85A

Helft beim OpenRubyRMK, einem freien Programm zum erstellen von RPGs! (→ GitHub-Projekt)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron