Haskell: Wie kann man forkIO verwenden, um mehreren Clients die Verbindung zu einem Server zu ermöglichen?

8

Ich versuche, mehrere Clients mit einem Server verbinden zu lassen. Was ich geschafft habe, ist, einen Client mit einem Server zu verbinden, indem ich für den Server verwende:

%Vor%

und für den Kunden:

%Vor%

Diese sind eindeutig nur für Testzwecke;)

Nun habe ich gelesen, dass ich forkIO verwenden muss, um mehreren Clients die Verbindung zu diesem einen Server zu ermöglichen. Ich konnte jedoch nicht herausfinden, wie ich ForkIO verwenden sollte oder wie ich die verschiedenen Clients verwalten sollte, die eine Verbindung herstellen. Kann mir jemand erklären, was ich tun soll?

Vielen Dank im Voraus!

    
user1034455 07.11.2011, 20:37
quelle

2 Antworten

6

Wie ein allgemeiner Stil-Kommentar, würde ich die Reaktion des Servers auf die Verbindung des Clients in eine separate Funktion aufteilen. Das macht es meiner Meinung nach leichter zu lesen.

%Vor%

Jetzt wollen wir wahrscheinlich, dass es endlos läuft, da dies die Art ist, wie die meisten Server arbeiten. So verwenden wir für immer (von Control.Monad)

%Vor%

und von hier aus wird die Art und Weise, wie man forkIO verwendet, ziemlich klar

%Vor%     
Probie 08.11.2011, 16:47
quelle
8

Der Schlüssel ist, dass Sie, sobald Sie eine Verbindung mit accept akzeptiert haben, einen neuen Thread forkieren möchten, um die Verbindung zu verarbeiten, während der Haupt-Thread wieder zuhören geht. Also sollte so etwas funktionieren.

%Vor%

Beachten Sie, dass auf diese Weise der Server so lange ausgeführt wird, bis Sie den Prozess beenden, was für viele Server häufig ist. Um ein ordnungsgemäßes Herunterfahren zu implementieren, ist einige Cross-Thread-Kommunikation mit MVars oder STM erforderlich.

    
hammar 07.11.2011 20:54
quelle

Tags und Links