[Python-de] Problem mit SocketServer
Eugen Ruppert
nomail at nomail.de
Mo Mai 6 12:29:46 CEST 2013
> Wenn ich in handle(self):
> eine while True Schleife drumrumbaue klappt es ...
>
> Allerdings blockiert dann nichts und es wird munter interiert.
Der Sinn Deines letzten Satzes erschließt sich mir ehrlich gesagt
irgendwie nicht. Normalerweise "blockiert" so ein while:True im Handler
den Server für andere Clients.
Solange es keine "high-performance" Anwendung werden soll,
ist das "1 Thread-pro-Client" Model eine gut funktionierende und
einfach umzusetzende Lösung.
Dazu reicht es schon aus, den ThreadingMixIn zu nutzen:
...
class ThreadedTCPServer(SocketServer.ThreadingMixIn,
SocketServer.TCPServer): pass
... [in main] ...
# Create the server, binding to localhost on port 9999
server = SocketServer.ThreadedTCPServer((HOST, PORT), MyTCPHandler)
Alternative wären asynchrone Server wie Tornado, Twisted, Gevent usw.
> Die Dokumentation bezieht sich auf "Requests". Nur was ist ein
> Request ?
>
> Wenn ich den Autor richtig deute versteht er darunter einen
> kontinuierlichen Datenstrom bis der Client irgendwann sagt "Ende".
Ja, so kann man es verstehen. Es gilt allerdngs nur in eine Richtung
und "am Stück". Also:
clientsock.sendall("HELLO?")
wäre ein Request.
Eugen
Mehr Informationen über die Mailingliste python-de