SocketServer

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
djk
User
Beiträge: 1
Registriert: Freitag 18. Juni 2010, 09:25

Hallo,

ich baue gerade einen simplen Server, der Daten von (iPhone-)Clients in einer Datenbank verwaltet. Nun habe ich den Fall, dass ich vom Client eine Verbindung aufbaue und diese gerne halten möchte, bis ein zweiter Client eine bestimmte Nachricht sendet um erst dann dem ersten Client eine Antwort zu senden.
Wie kann ich nun am besten die Kommunikation zwischen den beiden Server-Threads abwickeln?
Bisher habe ich einen simplen SocketServer erstellt:

Code: Alles auswählen

class SearchRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
      ...

if __name__ == '__main__':
    server = SocketServer.ThreadingTCPServer(("", PORT), SearchRequestHandler) 
    server.serve_forever()
Da der Server allerdings (zumindest theoretisch) auch eine große Anzahl an Clients (1.000 - 10.000?) bedienen können sollte, ist das vielleicht nicht die richtige Vorgehensweise. Bevor ich jetzt tiefer in andere Konzepte einsteige (asyncore, twisted?), wollte ich hier erstmal fragen, wie ich am Besten vorgehe.

Ich bin noch relativ frisch bei Python und Netzwerkprogrammierung, hoffe ihr könnt mir hierbei helfen. Danke
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dein Ansatz ist für 1000-10000 Clients leider nicht geeignet. Vielleicht willst du dir mal http://www.tornadoweb.org/ anschauen, das bringt einen Server mit, der keine Threads benutzt, sondern offene Socket-Verbindungen per Unix (oder OSX) Betriebssystem-Aufruf effizient pollt und so mit einer großen Anzahl offener Verbindungen klarkommt. Ein Chat bzgl. Pub/Sub-System ist auch immer das erste Beispiel, was gezeigt wird. Alternativ zu Python würde ich noch http://nodejs.org/ empfehlen.

Stefan
Antworten