[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