Frage

Das Netzwerk lib Ich Bedürfnisse bin Schreiben von Nachrichten über einen TCP-Socket senden und empfangen. Meldungen können jederzeit gesendet oder empfangen werden, das heißt als Vollduplexkanal arbeiten.

Ich konnte solches Szenario mit zwei Threads implementieren. Haupt-Thread Aufruf send () und einen eigenen Thread vor allem bei recv blockiert () Aufruf

Meine Frage ist: ist es möglich, das gleiche Szenario mit einem einzigen Thread zu implementieren? D. h durch eine Callback-Funktion Registrierung?

Als Randbemerkung:. Ich muss dieses Szenario in C implementieren ++, Java und Python

War es hilfreich?

Lösung

Ja, es möglich. Sie benötigen eine API zu verwenden, die Multiplex-I / O erlaubt. Unter C / C ++ und Python können Sie auswählen () und nicht-blockierende I / O, so dass die einzige Vernetzung Anruf Sie jemals (wählen Sie blockieren in ist). Es gibt auch poll () und epoll () und eine Reihe von anderen ähnlichen APIs, die die gleiche Sache, mit unterschiedlichem Grad der Effizienz und Portabilität zu erreichen. Java hat non-blocking I / O APIs auch.

Eine andere Möglichkeit ist asynchrone E / A zu verwenden, in dem Sie das Betriebssystem angewiesen, eine E / A-Transaktion zu starten und es benachrichtigt Sie (durch einen Mechanismus), wenn sie den Betrieb beendet hat. Ich bin nicht mit dem Stil der Netzwerkprogrammierung vertraut, aber, so dass ich keine Details zu geben versuchen.

Andere Tipps

Im Allgemeinen wird eine Bibliothek würde dies tun, indem eine Schnittstelle in die Anwendung des Hauptschleife / Ereignisschleife bereitstellt.

Zum Beispiel der meist Single-Threaded-Netzwerk-Anwendungen verwenden würden eine Hauptschleife haben, dass die Blöcke in select(), poll() oder ähnlichem. Ihre Bibliothek würde nur einen Dateideskriptor zurückgeben, dass die Anwendung in seiner select() / poll() Aufruf enthalten sollte, und eine Callback-Funktion, dass die Anwendung aufrufen sollte, wenn die Datei-Descriptor lesbar ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top