#26 7. Dezember 2010 AW: Cometd / node.js & socket.io und Co Wie willst du das ganze Pushen? Also iwie muss die Information doch gespeichert werden damit das ganze von dem Socket abgefragt und ausgegeben werden kann. + Multi-Zitat Zitieren
#27 7. Dezember 2010 AW: Cometd / node.js & socket.io und Co Mir schwirrt im Kopf irgendwie sowas herum wie gar keine Speicherung von Daten (außer in der Session wenn überhaupt) bis auf den Part mit dem Kommentar speichern ... Irgendwie muss es ja möglich sein die Clients OTF zu informieren ... + Multi-Zitat Zitieren
#28 7. Dezember 2010 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Cometd / node.js & socket.io und Co hab meinen server nochmal ein wenig überarbeitet: No File | www.xup.in starten über die bat/shell folgende komandos gibt es: Code: load -> läd ein modul aus dem ordner "ext" unload -> löscht das modul aus dem speicher close -> schließt die verbindung wenn man ein modul via "load" eingebunden hat kann man methoden davon aufrufen: Code: load chat auth [ { "username": "hans", "password": "geheim" } ] query [ { "to": "benutzer", "message": "asdf" } ] wie man sehen kann werden parameter als JSON übergeben der code würde praktisch so umgesetzt auf dem server: PHP: $modul = new Chat (); $modul -> auth (array( "username" => "hans" , "password" => "geheim" )); $modul -> query (array( "to" => "benutzer" , "message" => "asdf" )); zudem wird alle 60sek beim aktuell geladenen modul die methode "update" aufgerufen (falls vorhanden). im ordner "ext" sind zwei beispiel-klassen drinnen. ohne update: Code: load hello say_hello mit update: Code: load helloWorld say_hello beispiel aus der shell: Code: 1:connected load test 4:module "Test" file not found load hello 2:module loaded say_hello hello load helloWorld 3:module removed 2:module loaded 8:update@1291740233 HelloWorld: no new updates say_hello HelloWorld: hello world 8:update@1291740293 HelloWorld: no new updates das ist nun erstmal die basis. um das ganze weiter ausbauen zu können braucht man noch ne schnittstelle um sockets bestimmten benutzer zuordnen zu können. dann kann man auf serverseite die sockets auch benennen und ne simple funktion in dein script integrieren mit der du bei neuen kommentaren direkt an die sockets updates senden kannst. mal sehen wie ich die kommunikation zwischen applikation und server baue. + Multi-Zitat Zitieren
#29 7. Dezember 2010 AW: Cometd / node.js & socket.io und Co vielleicht könnte man diese pipes so machen: PHP: <? php namespace webs ; if(! class_exists ( '\webs\Base' )) require 'Base.class.php' ; class Pipe extends Base { // name of the pipe protected $file = '' ; // the read-offset protected $offset = 0 ; public function __construct ( Worker $w ) { $address = '' ; socket_getpeername ( $w -> getSocket (), $address ); $this -> file = sprintf ( '%s/%s.pipe' , realpath ( __DIR__ . '/../pipes' ), md5 ( $this -> file )); if(! file_exists ( $this -> file )) file_put_contents ( $this -> file , '' ); } public function readln (& $buff = '' ) { $buff = '' ; $fp = fopen ( $this -> file , 'r+' ); flock ( $fp , LOCK_EX | LOCK_NB ); fseek ( $fp , $this -> offset ); $buff = fgets ( $fp ); $this -> offset += strlen ( $buff ); flock ( $fp , LOCK_UN ); fclose ( $fp ); return trim ( $buff ); } public function writeln ( $buff ) { file_put_contents ( $this -> file , " $buff \n" , FILE_APPEND ); }} also einfach eine datei mit md5(ip-des-benutzers) anlegen und reinschreiben/lesen. dann musst du nur noch diese pipe mit dem entsprechenden benutzer verknüpfen, aber das sollte relativ leicht gehen, denn dazu musst du ja nur den md5-hash der ip in deiner db speichern und dann im Worker/Modul diese info einmalig auslesen. + Multi-Zitat Zitieren
#30 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co keiner ne idee dazu? oder driftet das zu sehr ab? hätte mal ne frage dazu: ist es irgendwie möglich von nem anderen prozess aus direkt auf den socket zum client zuzugreifen? socket_getsockname() irgendwie in ne datei speichern, dann auslesen und mit nem neuen socket verbinden und reinschreiben? + Multi-Zitat Zitieren
#31 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Ich leider nein. Hinke euch schon seit Posting 19 hinterher, ab da hab ich ncihts mehr so wirklich verstanden ^^ Ich muss ein eigenen Server haben um das zu testen oder? Die start.bat verwirrt mich nämlich ^^ + Multi-Zitat Zitieren
#32 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co einfach den pfad anpassen wo bei dir php liegt. Code: set php="pfad/zum/php-interpreter/php.exe" wenn die läuft machst du ne neue konsole auf und tippst ein: Code: telnet localhost 9844 um dich zum php-server zu verbinden. + Multi-Zitat Zitieren
#33 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Du bist ein Schatz! Ich muss mir das ganze in Ruhe anschauen, mache den Kram mit PHP zwar seit 6 Jahren aber so pro bin ich nun auch nicht! Nein, ich denke dieser Thread könnte manchen Menschen noch ziemlich hilfreich sein! Das Thema ist ja sehr interessant! + Multi-Zitat Zitieren
#34 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co wenn ich das noch mit den pipes und den zombies geregelt bekomm, können wir das ganze ja mal in ner html5 umgebung testen. + Multi-Zitat Zitieren
#35 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Year freue mich drauf! :] Wäre das nicht ein Workfix Einfach Server neu starten ^^ + Multi-Zitat Zitieren
#36 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Also ich hatte ja einige Zeit an meinem Wissen für Python gearbeitet. Hier findet sich eine Funktionsweise, welche genau das Problem der "pipe" löst: Twisted FAQ Ich bin grad dabei rauszusuchen, wie das ganze funktioniert. Wenn ich mehr weiß, sag ich bescheid + Multi-Zitat Zitieren
#37 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co ich denke ich werde für das pipe-problem 2 methoden anbieten. 1. files 2. sqlite/mysql bei beiden verfahren werden die "nachrichten" dann anhand der ip des benutzers zugeordnet. dazu bau ich einfach eine modul-basis klasse die die ganze arbeit übernimmt: PHP: abstract class ModuleBase { protected function readFromPipe () { } protected function writeToPipe () { }} welches verfahren dann zum einsatz kommt kann man in ner ausgelagerten config.php angeben. einfacher gehts wohl nicht, denn es ist ja wichtig, dass die schnittstelle leicht zu verstehen ist, und das sind sockets mmn. nicht + Multi-Zitat Zitieren
#38 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Also Twisted macht es so: Es wird eine instance für jeden Client gebildet (logischerweise). Die Instanzen speichert er in einer "list" (bei php registry-mäßig). und dann ruft er quasi nur die instanz auf: PHP: class Zuteile { private $registry = array(); public function connectMade () { $registry [ 'clients' ][ $this -> getClientIP ()] = new Server } public function getClientMessage ( $line ) { foreach( $registry [ 'clients' ] as $client ) { if ( $line == 'I want to quit' ) { $client -> writeToClient ( 'Bye Bye' ); } $client -> closeConnection (); } if ( $line == '127.0.0.1 => HALLO Localhost' ) { $this -> registry [ 'clients' ][ '127.0.0.1' ]-> writeToClient ( 'PUSH DIESE Nachricht weiter' ); } }} class Server { private $instance ; public function writeToClient ( $line ) {}} So oder so ähnlich. Oder steht sowas gar nicht zur diskussion? + Multi-Zitat Zitieren
#39 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co das problem dabei ist, dass man ja aus einer php-applikation in einem anderen prozess darauf zugreifen muss. der server läuft ja komplett eigenständig ohne apache usw. der eigentliche PUSH kommt ja von seiner webseite. + Multi-Zitat Zitieren
#40 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co Könnte aber auch wieder zu Problemen führen, wenn man eine Anwendung wie bei Facebook machen will die einen über Fotokommentare ect benachrichtigt. Da in einem Netzwerk ja mehrere Leute einen FB-Account haben können. Für so eine Anwendung wäre eine Kombi aus Benutzername,Benutzerid oder sonst etwas, was eindeutig einen User identifiziert + IP sicherer oder? + Multi-Zitat Zitieren
#41 8. Dezember 2010 AW: Cometd / node.js & socket.io und Co ja stimmt. da mach ich dann nen suffix dazu. am besten wär wohl der session-token. + Multi-Zitat Zitieren
#42 16. Dezember 2010 AW: Cometd / node.js & socket.io und Co hab den server nun in firefox4 ein wenig getestet und er läuft soweit auch. das problem mit den zombies hab ich auch in den griff bekommen, der fehler: ich hatte zwar nen signal-handler im hauptprogramm, aber keinen beim erstellen der worker und deswegen warteten die beendeten worker vergebens auf ihre erlösung ^^ als pipe zwischen applikation und server/worker hab ich drei varianten erstellt: - gemeinsame nutzung einer zweier dateien (in/out) im FIFO prinzip - sqlite als message-queue - mysql als message-queue welche der methoden verwendet werden soll kann man in einem conf-file angeben. bei änderungen muss aber der komplette server neu gestartet werden, weil die angaben im ram gespeichert bleiben solange der server läuft. wie genau die kommunikation zwischen applikation und server von statten geht werd ich später noch mit beispielen und quelltexten dokumentieren. ist aber kinderleicht. zudem kann man in dem conf-file auch ein modul direkt beim erstellen des workers laden lassen. also der "load"-befehlt fällt dann weg. die syntax hat sich auch ein wenig geändert, um zwischen funktionsaufrufen und serverfunktionen unterscheiden zu können. serverbefehle beginnen immer mit einem @, serverantworten beginnen mit einem ! gefolgt vom status-code und dahinter nach einem : folgt eine kleine beschreibung Code: @auth session-id !123:session erfolgreich geladen !456:pipe "File" erfolgreich initialisiert @load modul !789:modul erfolgreich geladen funktion attribut [...] wichtig beim auth-befehl: es ist vollkommen egal was für ein token übergeben wird, solange die applikation dann hand von ip+token die entsprechende session zuordnen kann. d.h. es muss nicht zwingend die echte session-id sein. den attribut-parser hab ich auch noch ein wenig verbessert. mehrere argumente werden wie sonst auch als json-array interpretiert, wird nur ein attribut übergeben kann man es einfach dahinter schreiben. Code: funktion attribut # "attribut" wird an die function übergeben funktion ein längerer satz 1234 # "ein längerer satz 1234" wird als einzelnes attribut übergeben funktion ["foo", "bar", "baz"] # es werden drei attriute "foo", "bar" und "baz" an die funktion übergeben übersetzt: PHP: $modul -> funktion ( "attribut" ); $modul -> funktion ( "ein längerer satz 1234" ); $modul -> funktion ( "foo" , "bar" , "baz" ); sourcecode gibts, sobald ich der meinung bis, dass das ganze stabil läuft. werde das dann in einem eigenen thread vorstellen, mit ner dokumentation ohne gramatik/rechtschreibfehler ^^ + Multi-Zitat Zitieren
#43 16. Dezember 2010 AW: Cometd / node.js & socket.io und Co Was wären wir nur ohne dich! ?( + Multi-Zitat Zitieren
#44 21. Dezember 2010 AW: Cometd / node.js & socket.io und Co Schatz? Ich traue mich gar nicht wirklich zu fragen, wollte das mal testen über die Webgeschichte also über Chrome, leider klappt das nicht so ... Code: <!doctype html> <html> <head> <meta charset="UTF-8"> <title>WebSocket Chat</title> </head> <body> <h1>WebSocket Chat</h1> <section id="content"></section> <input id="message" type="text"/> <script src="http://www.google.com/jsapi"></script> <script>google.load("jquery", "1.3")</script> <script src="http://jquery-json.googlecode.com/files/jquery.json-2.2.min.js"></script> <script src="http://jquery-websocket.googlecode.com/files/jquery.websocket-0.0.1.js"></script> <script> var ws = $.websocket("ws://localhost:9844/", { events: { message: function(e) { $('#content').append(e.data + '<br>') } } }); $('#message').change(function(){ ws.send('message', this.value); this.value = ''; }); </script> </body> </html> LG + Multi-Zitat Zitieren
#45 21. Dezember 2010 AW: Cometd / node.js & socket.io und Co wenn du meinen code verwendest: da fehlt noch der komplette handshake usw. d.h.: der funktioniert nicht + Multi-Zitat Zitieren
#46 21. Dezember 2010 AW: Cometd / node.js & socket.io und Co Hast du eventuell ein funktionierendes Beispiel? + Multi-Zitat Zitieren
#47 21. Dezember 2010 Zuletzt von einem Moderator bearbeitet: 15. April 2017 AW: Cometd / node.js & socket.io und Co .. sollte also nicht mehr so lange dauern + Multi-Zitat Zitieren
#48 4. Januar 2011 AW: Cometd / node.js & socket.io und Co Ich hoffe ja das unser lieber Freund und Stecher bald mal wieder Zeit für diese coole Geschichte hat! Auf Murdoc's Code kann man gut ****orn! + Multi-Zitat Zitieren
#50 21. Januar 2011 AW: Cometd / node.js & socket.io und Co ja hab viel zu tun und nicht die nötigen ressourcen zur verfügung nebenher dieses doch recht große projekt alleine fortzuführen. du wirst dich also gedulden oder eine andere alternative suchen müssen. + Multi-Zitat Zitieren