Ich möchte einen Server programmieren, der Websocket-Clients handhabt, während mysql selects über sqlalchemy auswählt und mehrere Websites gleichzeitig scrapet (scrapy). Die empfangenen Daten müssen berechnet, in der Datenbank gespeichert und dann an die Websocket-Clients gesendet werden.
Meine Frage ist, wie kann das in Python aus logischer Sicht geschehen? Wie muss ich die Codestruktur einrichten und welche Module sind die beste Lösung für diesen Job? Momentan bin ich davon überzeugt, dass ich Twists mit Threads verwende, in denen das Scrape- und Select-Zeug läuft. Aber kann dies einfacher gemacht werden? Ich finde nur einfache verdrehte Beispiele, aber offensichtlich scheint dies eine komplexere Aufgabe zu sein. Gibt es ähnliche Beispiele? Wie beginne ich?
Cyclone , ein Twisted-basierte 'Netzwerk Toolkit', basierend auf / ähnlich wie Facebook / friend Tornado Server, Unterstützung für WebSockets enthält: Ссылка
Hier ist ein Beispielcode:
Hier ist ein Beispiel für die Verwendung von txwebsocket:
Sie haben möglicherweise ein Problem mit SQLAlchemy mit Twisted; von dem, was ich gelesen habe, funktionieren sie nicht gut zusammen ( Quelle ). Sind Sie mit SQLA verheiratet, oder wäre ein anderes, kompatibleres OR / M ausreichend?
Einige twisted-friendly OR / Ms enthalten Storm (eine Verzweigung) und Twistar , und Sie können immer auf Twisteds zentrale db-Abstraktionsbibliothek zurückgreifen twisted.enterprise.adbapi . Es gibt auch Asynchron-freundliche db-Bibliotheken für andere Produkte, wie zum Beispiel txMySQL , txMongo und txRedis und paisley (couchdb).
Sie könnten möglicherweise beide Cyclone (oder txwebsockets) und Scrapy als Kind Dienste des gleichen Multiservice , die auf verschiedenen Ports ausgeführt werden, aber in derselben Anwendungsinstanz enthalten sind. Die Dienste können entweder über den übergeordneten Dienst oder über einen RPC-Mechanismus (wie JSONRPC , Perspective Broker , AMP , XML-RPC (2 ), oder du kannst einfach vom scrapy-Dienst in die db schreiben und mit websockets lesen. Redis wäre großartig für diese IMO.
Idealerweise sollten Sie nicht Ihren eigenen WebSockets-Server schreiben, aber da Sie Twisted ausführen, können Sie dies möglicherweise nicht tun: Es gibt mehrere WebSockets-Implementierungen (siehe diese Suche auf PyPI). Leider ist keiner von ihnen Twisted-basiert Bearbeiten siehe @ JP-Calderones Kommentar unten.]
Twisted sollte den Master-Server steuern, also solltest du wahrscheinlich mit etwas anfangen, das über twistd
ausgeführt werden kann (siehe hier wenn du neu bist. Die WebSocket-Implementierung, die von @ JP-Calderone und Scrapy erwähnt wird, sind beide Twisted-basiert. Daher sollten sie von Ihrem Master Twisted-basierten Server vernünftig trivial sein. SQLAlchemy wird schwieriger sein, das habe ich schon früher in kommentiert diese Frage.
Tags und Links python multithreading websocket scrapy twisted