MIGHTY MARCUS BLOG

10 Finger-System Typing ohne jede Ahnung von irgendwas

Flash XML Socket und Perl Socket Server

Montag 11. Januar 2010 von mighty.marcus

Irgendwann bin ich auf die Idee gekommen Echtzeitfeatures in meine Singlebörse einzubauen, eine Echtzeit-Onlineliste z.B., oder eine sofortige Benachrichtigung bei Posteingang, Gästebucheinträgen etc. Leider hielt sich mein technisches Know-How in Grenzen und ich wusste nicht wie ich es umsetzen sollte.
Ich probierte verschiedene Möglichkeiten aus wie Ajax Polling oder Flags setzen, war damit aber absolut unzufrieden.
Alle zehn Sekunden nach Daten zu schauen bringt kein befriedigendes Ergebnis.

Irgendwann bin ich dann im Internet auf einen Blog-Artikel über das Bayeux Protokoll gestoßen, eine Methode mittels des HTTP-Protokolls Daten vom Server empfangen zu können, und zwar ohne Ajax Requests (die Seite mittels Javascript in einem bestimmten Zeitabstand automatisch aktualisieren lassen). Dieses Protokoll, in Anlehnung an Ajax auch Comet genannt (soll wie Ajax ein Reinigungsmittel sein), erlaubt es Daten in Echtzeit zu empfangen. Leider konnte ich es nicht umsetzen, weil ein Java-Server dafür Voraussetzung ist, bzw. es gab auch eine Lösung für Perl, jedoch war hier ein Root-Server Voraussetzung.

Mit meinem gehosteten Webspace konnte ich damit nichts anfangen.

Irgendwann gab ich die Idee dann auf, ich habe sicher monatelang im Internet nach einer Lösung recherchiert. Naja, scheinbar an der falschen Stelle, denn durch Zufall stieß ich auf einen Artikel über Flash XML Sockets und ich fand sogar ein Tutorial wie man sich eine dazugehörigen Server in Perl baut.

Und Perl ist auf meinem Webspace verfügbar…

Nun ja, ich fing also an Perl zu lernen, und nach kurzer Zeit stieß ich auf POE, ein Perl Framework, welches es einem gerade solche Sachen wie Socket Server zu erstellen sehr erleichtert. Ich glaube Perl heisst Perl Object Environment, es ist ein leicht verständliches (ziemlich) objektorientiertes Framework, das man auch ohne Root-Zugriff installieren kann.
Einfach anstelle von

use POE;

mit

use lib “dein/absoluter/pfad/zu/POE/”;
use POE;

includen.

Dieses Framework und die XML Socket Klasse von Flash zusammen mit einer JSXMLSocket Klasse für Javascript haben es mir schließlich doch noch ermöglicht, meine Webseite mit Echtzeitfeatures auszustatten.
Sogar einen Chat habe ich damit gebaut, und man kann andere User direkt anchatten über ein kleines verschiebbares Div.

Die Technik meiner Seite sieht in Etwa so aus: Man loggt sich ein, es wird die Main.php aufgerufen, die einen Flash Film öffnet, der eine Verbindung zum Perl Server herstellt. Gleichzeitig “verbindet” sich ein Javascript-Script mit dem Flash Film, was es ermöglicht empfangene Daten direkt an den Browser zu senden um so die Seite zu aktualisieren. Der Flash-Film selbst ist unsichtbar, er sorgt nur für die Verbindung und schickt alle empfangenen Daten zum Javascript-Script, bzw. das Javascript-Script sendet Daten zum Flash-Film, und dieser zum Server.
Die Seiten meiner Webseite werden in einem iframe in der Main.php dargestellt, denn die Main.php muss ja die ganze Zeit verfügbar sein, sonst bricht die Socketverbindung ab.

Serverseitig für das Datenhandling benutze ich Regular Expressions, worin Perl ja sehr schnell arbeitet.
Der Server läuft stabil schon seit Wochen ohne eine einzige Unterbrechung, anscheinend habe ich alles richtig gemacht, keine Speicherlecks etc. und mein Hoster hat sich auch noch nicht beschwert…. ;)
Gut, die paar Hanseln auf meiner Seite muss er schon vertragen.

Momentan bin ich dabei ein Spiel zu programmieren, in Flash/Actionscript 3. Die Objektorientierung ist natürlich für einen der mit PHP angefangen hat schon eine Herausforderung, aber schön langsam kriege ich es raus. Am liebsten aber programmiere ich an meinem Perl-Server rum, da läuft es am geschmeidigsten. Ausserdem mag ich die Perl-Syntax.

Achja, falls jemand jetzt auf die Idee kommt sich auch so einen Socket-Server zu basteln, hier eine kleine Hilfestellung.

Du brauchst nicht unbedingt Java, es geht auch in Perl. (Oder auch Python)
Für Perl empfehle ich auf jeden Fall POE, es ist genial!
Adobe verlangt, dass man ein sogenanntes policy file ausliefert, und zwar über einen Socket.
Dieses policy file muss im xml Format vorliegen.
Damit hatte ich eigentlich die größten Probleme am Anfang, weil auch nirgends genau beschrieben steht, wie man sich so einen policy file Server baut und auch nicht wie dieses policy xml file aussehen soll.

Mit dieser Anleitung schafft ihr es aber sicher:

my $xml = ‘[?xml version="1.0"?][!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"][cross-domain-policy][site-control permitted-cross-domain-policies="master-only"/][allow-access-from domain="localhost" to-ports="6005" /][/cross-domain-policy]‘;

Sorry, ich habe HTML an, stellt euch einfach die ] und [ als HTML > und < vor.

Das ist das xml file, welches ich in eine Variable gepackt habe.

Über den Flash-Film wird mit:

Security.loadPolicyFile("xmlsocket://localhost:4001");

das policy file xml angefordert.

Du musst natürlich in diesem Beispiel einen Perl Socket Server auf Port 4001 laufen haben, der das File auch ausliefern kann.

Der Flash-Film verbindet sich also auf Port 4001 mit dem Server und bekommt die $xml gesendet, ist zufrieden und gibt nun den Zugriff auf Port 4000 frei, auf dem der eigentliche Socket-Server läuft.

Beispiel: Dein policy Server wartet auf eine Verbindung.
Der Flash-Film beantragt eine Verbindung.
Policy Server accept->Flash-Film.
Flash Film sendet: [policy-file-request/]
Server->sendet $xml;
Zugriff auf Port 4000 ist freigegeben.
Verbindung des XML Sockets mit dem Server auf Port 4000.

Übrigens, die Daten die man verwendet müssen nicht wirklich im XML Format sein, ich benutze mein eigenes kleines Protokoll, z.B. [c][hallo ihr pfeifen]. So weiß der Server, aha das ist eine c Chat Nachricht.

Ich hab übrigens mein POE-Skript so geschrieben, dass es sich um beide Server kümmert. In dem Skript wird auf Port 4000 der MainServer gestartet, auf Port 4001 der Policy File Server.

Nun arbeite ich auch noch an einem Spiel, welches über einen anderen Server läuft, jedoch bekommt es das policy file auch von Skript eins.

Ich muss gestehen, ich hätte den Artikel gar nicht anfangen sollen, ich in total müde und habe überhaupt keine Lust mehr. Also macht es gut und immer am Ball bleiben!

Kategorie: Programmierung | Keine Kommentare »

Anruf am Morgen (Leistungsgesellschaft)

Dienstag 6. Oktober 2009 von mighty.marcus

Heute morgen wurde ich geweckt durch einen Anruf des Alice Hansenet Callcenters. Eine Frau auf Speed überfiel mich im Halbschlaf mit der Frage, ob ich in Zukunft bei Produktveränderungen oder
Produkterweiterungen telefonisch darüber informiert werden möchte. Natürlich sagte ich nein, daraufhin fragte sie mich ob ich dann lieber bei einem Produktwechsel 20 Euro bezahlen wolle.
Den ganzen Beitrag lesen »

Kategorie: Allgemein | Keine Kommentare »

Internet Explorer italic Bug

Mittwoch 15. Juli 2009 von mighty.marcus

Ich habe ein dreispaltiges Layout. Ein DIV Container links, ein DIV Container in der Mitte und einer Rechts.
Wenn ich jetzt im linken DIV einen italic Text einfüge, rutscht der ganze rechte DIV nach unten, und zwar dorthin wo der mittlere DIV aufhört.
Den ganzen Beitrag lesen »

Kategorie: Webdesign | 2 Kommentare »

Keywords in der Url - ein kleiner Test

Sonntag 15. Februar 2009 von mighty.marcus

Ich werde hier mal für mich - und alle die es interessiert - mal einen kleinen Test starten.
Und zwar geht es um das Thema Keywords in der Url - bringt es tatsächlich Vorteile für das Ranking? Ich habe mittels PHP zwei zufallsgenerierte Texte erstellt, in denen 420 unterschiedliche Pseudo-Wörter vorkommen. 399 “Wörter” davon bestehen ganz einfach aus zufällig generierten Buchstabenfolgen, die 6 Buchstaben lang sind. 21 mal kommt das Pseudo-Wort “Deiramantis” vor, das in diesem Test die Rolle des Keywords spielt, und dessen Keyworddichte 5% ausmacht.
Die Texte sollen keinen Double Content erzeugen sondern ein jeder soll unique sein. Keyworddichte, Länge des Textes und die Postition der Keywords (Das erste sowie jedes 21te Wort) sind aber identisch. Den ganzen Beitrag lesen »

Kategorie: SEO | 5 Kommentare »

Keywords aus dem Text generieren mit PHP

Montag 9. Februar 2009 von mighty.marcus

Wie der Titel schon sagt, werde ich euch mal zeigen wie man mittels PHP Keywords aus einem String ziehen kann. Dazu zeige ich euch mein kleines Skript, welches ich für mein Forum geschrieben habe.
Es durchsucht den Text nach Wörtern, die groß geschrieben sind. Ich gehe nämlich davon aus, dass alle Wörter, die groß geschrieben sind, wichtig sind. Großgeschriebene Wörter sind ja meist Namen, Orte oder Objekte, kleine meistens nicht.
Klar, die besten Keywords sind die, die man manuell eingibt. Hat man jedoch nicht die Zeit oder Muse dazu, das selbst zu machen, ist so ein Keyword Generator eine gute Wahl.
Den ganzen Beitrag lesen »

Kategorie: Programmierung | 6 Kommentare »

Das perfekte Roulette System!

Montag 9. Februar 2009 von mighty.marcus

Im Internet gibt es viele Seiten, die behaupten das perfekte System fürs Roulette-Spielen herausgefunden zu haben. Man braucht dazu nur “Geld verdienen” in eine Suchmaschine einzugeben, um sie zu finden.

Mein Neffe hatte mich mal darauf aufmerksam gemacht und wollte mich überzeugen es doch einmal zu versuchen - da er erst 13 Jahre alt ist konnte er das nicht selbst tun. Ich habe ihm aber schon damals gesagt, dass dieses System (z.B. hier) nicht funktioniert, da es davon ausgeht dass man 1. unendlich viel Geld zur Verfügung hat und 2. der maximale Einsatz beschränkt ist - doch dazu später mehr. Den ganzen Beitrag lesen »

Kategorie: Allgemein | 9 Kommentare »

Wo sind die guten Zombiefilme?

Montag 9. Februar 2009 von mighty.marcus

Wo sind die guten Zombie Filme?

Lang, sehr lang ist es her, da kam ich gerade von der Schule nach Hause und machte vorher noch einen Abstecher bei Onkel V., der einen Videorekorder hatte. Ja, damals gab es noch keine DVD-Player für 30 Euro.

Ich hatte bei ihm mal Asterix der Gallier angeschaut. Das schien aber der einzige für Kinder geeignete Film zu sein den er besaß (ich war um die 8 Jahre alt), weshalb er mir dann einige der damals absolut hippen Exploitation-Filme zeigte, wie z.B. diese Kannibalen Filme. Die waren ja nicht schlecht und klar war es für mich damals was besonderes, solche Filme sehen zu dürfen - im Vergleich zu Pumuckl, Captain Future, Tom & Jerry und die ganze andere TV-Kost (die ich aber damals auch liebte). Den ganzen Beitrag lesen »

Kategorie: Medien | 2 Kommentare »