Simpler Chat (Server-Client) Multithreading

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Daniel26
User
Beiträge: 17
Registriert: Freitag 2. Juni 2017, 09:29

Mittwoch 6. Februar 2019, 13:54

Wenn du Kontrolle über beide Seiten der Kommunikation hast, dann empfehle ich dir nachdrücklich, eine bestehende Lösung zu benutzen. ZeroMQ oder nanomsg. Letzteres ist mein aktueller Favorit. Die nehmen dir viel von der Komplexität ab, die dir überhaupt nicht bewusst ist.
Ich gestalte nur den Server. Der "Client" kann irgendwas sein. Zum testen benutze ich nen Telnet-Client.
Es geht um ein Script, das Anfragen auf einem Port annimmt und drauf hin die passenden Werte ausliefert.

Gruß
Sirius3
User
Beiträge: 9680
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 6. Februar 2019, 14:03

@Daniel26: bei "Telnet" also dann ein zeilenbasiertes Protokoll. Wie schon geschrieben, ist dann der Einstieg über die Pythondokumentation zu asyncio.
Benutzeravatar
__blackjack__
User
Beiträge: 3048
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 6. Februar 2019, 14:34

Alternativ hätten `socket`-Objekte eine Methode um sich ein Dateiobjekt geben zu lassen, wo man dann auch Zeilen lesen kann ohne sich selbst um die ganzen Details kümmern zu müssen. Eventuell möchte man sich dazu noch etwas aus dem `io`-Modul zum ”wrappen” nehmen, damit es eine Text- und keine Bytes-Datei ist.
“In computing, invariants are ephemeral.” – Alan J. Perlis
__deets__
User
Beiträge: 5328
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 6. Februar 2019, 17:23

Daniel26 hat geschrieben:
Mittwoch 6. Februar 2019, 13:54

Ich gestalte nur den Server. Der "Client" kann irgendwas sein. Zum testen benutze ich nen Telnet-Client.
Es geht um ein Script, das Anfragen auf einem Port annimmt und drauf hin die passenden Werte ausliefert.
Naja, aber du kannst ja an den client auch eine Vorgabe machen. Denn wie gesagt - automatisch passiert da nichts sinnvolles. telnet/newline ist das absolute Mininmum, und wenn das fuer dich reicht - ok. Aber wehe da kommen mal binaere Daten ins Spiel, dann hast du den Salat und musst das ganze irgendwie per base64 oder so uebertragen. Damit ja kein Zeilenende-Zeichen in die Daten kommt.
Benutzeravatar
__blackjack__
User
Beiträge: 3048
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 6. Februar 2019, 18:30

Oder den HTTP-Weg, eine Textzeile, die sagt wie viele Bytes folgen, und dann exakt so viele Bytes senden/empfangen. Wobei dann, wenn das Protokoll auch „stateless“ sein darf, natürlich wieder gilt: Nichts selbst basteln wenn es das schon fertig gibt, und HTTP gibt es schon fertig. :-)
“In computing, invariants are ephemeral.” – Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 657
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Montag 11. Februar 2019, 07:14

Daniel26 hat geschrieben:
Mittwoch 6. Februar 2019, 10:31
Gibts denn irgendwo ein gutes Tutorial wie man mit Sockets arbeitet?
Bin gerade auf dieses Tutorial gestossen und habe mich an diese Unterhaltung erinnert.
https://realpython.com/python-sockets/
Über die Qualität kann ich nichts sagen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten