fragen zu shmop

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • fragen zu shmop

    Hi Leute,

    ich hab mir grad nen kleinen chat in ajax geschrieben.. und hier dazu auch nen Thread dazu....

    und machte mir sorgen um die performance.....
    alle 3 sek + alle 20 sek ein select pro user !

    dort wurde ich dann auf shmop hingewiesen...
    weil die ewigen select querys bei vielen usern in vielen chaträumen ganz schön an der leistung und traffic nagen !?

    nun hab ich aber gegoogelt und dabei rausgelesen, dass dies die server-cpu ebenfalls stark ebeinträchtigt und zudem bei vielen providern ein php-chat explizit verboten ist...

    stimmt das so ?

    außerdem kann ich das wohl unter WAMP nicht nutzen ?
    bisher funktionierten hier jedoch meine ersten grundversuche
    shmop_open,shmop_write,shmop_read,shmop_size

  • #2
    Hi,
    shared memory hilft dir nur wenn du mehrer instanzen
    des servers hast. Und ja bei vielen providern sind php-chats
    ausdrücklich verboten weil sie eben die serverload hochtreiben.
    Bei nem eigenen server oder nem gemieteten root-server ist
    das egal. Da liegen ja auch nicht noch andere user drauf.

    Wie wärs mit nem javapplet als irc-frontend und ein enstrechender
    channel im irc ?

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #3
      Original geschrieben von closure
      shared memory hilft dir nur wenn du mehrer instanzen des servers hast.
      Wie meinen?

      Nach meinem Verständnis kann man damit auch genausogut mehrere Scriptinstanzen oder Prozesse auf der selben Maschine auf einen gemeinsamen Speicherbereich zugreifen lassen - liege ich da falsch?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        ich denke schon, dass der server gemietet wird.. aber nen eigenen dez.i.

        ich möchte natürlich eine lösung verwenden, die leistung spart.
        auch wenn ich bei shmop grad mal bei read, open und write bin


        oder hat jemand einen guten lösungsansatz, wie ich die querys für meinen chat reduzieren kann... dann setze ich weiterhin auf diese lösung... den die läuft ja fast problemlos.. bis auf das eurozeichen

        Kommentar


        • #5
          Original geschrieben von wahsaga
          Wie meinen?

          Nach meinem Verständnis kann man damit auch genausogut mehrere Scriptinstanzen oder Prozesse auf der selben Maschine auf einen gemeinsamen Speicherbereich zugreifen lassen - liege ich da falsch?
          Nein ich hab mich einfach etwas missverständlich ausgedrückt.
          Mit serverinstanzen meinte ich instanzen eines scripts dass einen
          server implementiert. Also Server im sinne von applikation die mit
          einem clientprogramm kommuniziert.
          Ist also genau das was es nach deinem verständnis auch ist.


          greets
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            also gibt es darauf keine echte antwort ?

            würde schon gern wissen, ob und wie ich shmop nutzen kann....
            wenigstens für privat-räume, denn für jedes privat gespräch ne extra tabelle generieren und wieder löschen lassen find ich krass

            Kommentar


            • #7
              ich kann leider auch nur mein Frust ausdrucken.
              z.b.s der beispiel der zum shmop bei php.net steht
              http://de2.php.net/manual/de/ref.shmop.php
              funktioniert bei mir leider nicht auf dem localhost(unbekannte function) sondern nur auf der Konsole. dabei hat es leider nicht geklapt von einem anderem Script auf diesen Speicher zuzugreifen.
              ich glaube, dass mit einer temporärer Datei kommt man zum gleichem Ergebnis.
              Slava
              bituniverse.com

              Kommentar


              • #8
                also diese einstiegsbeispiele laufen bei mir schon.
                das mit der function unbekannt hatte ich nur kurz, bis ich in der php.ini das shmop freigegeben hatte...


                ich nutze : apache, mysql, php5 unter WinXP.

                aber ich weiß ja leider nicht, wie sich das nun mit der performance verhält....

                meine auto-select-querys gegen shmop ...
                bei letzterem bräuchte ich auch nur noch logfiles für den chat..
                nicht für jeden raum ne extra tabelle... die sache ansich würde also schon kleiner werden.

                Kommentar


                • #9
                  ich habe fast die gleiche einstellungen(xamp), und in php.ini wurde entsprechende dll freigegeben.
                  warum die function auf dem localhost nicht erkannt wird, un auf der console lauft, ist in moment ein rätsel für mich.

                  wenn es dir wirklich nur darum geht, wie es auf performance geht, dann muss du das mit bekannten methoden, wie zeitmessung mit microtime und beobachtung von speicherverbrauch, rausfinden.
                  Slava
                  bituniverse.com

                  Kommentar


                  • #10
                    okay... dein Hinweis hört sich sehrinteressant an !
                    zufällig fach-informatiker ?

                    aber leider fehlt mir dazu bis jetzt noch das knowHow.

                    okay... ich kann messen, wie lange die ausgabe einer seite dauert...
                    demnach auch die chatausgabe...
                    so kann ich messen, welche ausgabe am schnellsten läuft.

                    aber wichtiger wäre wohl der leistungsverbrauch... ich will ja nicht, dass mein ganzes Portal hängt, nur weil der chat alles frisst
                    und speicherdaten lesen bzw auswerten hab ich noch nie gemacht.
                    wüßte nicht mal wo ich da anfangen soll...

                    und mein chat wäre fast fertig, wenn die mysql version vorteile hätte.
                    für shmop muss ich ja noch mal von vorne beginnen...
                    aber ich wills mir auch nicht unbedingt einfach machen.... alle anderen module des portals sind auch immer nach besten wissen und gewissen hinsichtlicht der lösung gecodet.

                    Kommentar


                    • #11
                      also jede anfrage an server ist natürlich leitungverbrauch, die nicht nur aus sichtbarer ausgabe, sondern auch header-ausgabe besteht.
                      wenn du anzahl von zeichen in header + anzahl der zeichen in ausgabe addierst, dann bekommst du als fachinformatiker ein byte-zahl, der als traffik gezählt wird ( hat aber mit shmop nichts zutun).

                      speicher verbrauch kannst du mit
                      http://de2.php.net/manual/de/functio...-get-usage.php
                      beobachten
                      schau dir auch erste notlösung bei abgeschalteter memory_get_usage in Komentaren.

                      Ich weis nicht, wie dein chat aufgebaut ist, aber ich glaube, dass optimal wäre es an den user nur die neue (noch nicht empfangene)Nachrichten zu senden,
                      da ich schon lösungen gesehen habe wo die ganze Inhalt von den letzten 12 Nachrichten jedes mal hohgeladen wird.
                      Slava
                      bituniverse.com

                      Kommentar


                      • #12
                        na ich bin ja keiner... aber das ändert sich ja vielleicht bald...

                        das mit der letzten nachricht eines chats, mach ich grad !!!
                        denn bis dahin wurden bei mir auch immer die nachrichten der letzten 30 min geladen. Horror-traffic

                        muss nur das timestamp mit übergeben. das ich eh schon hatte ...
                        und das select führt ann nur noch ab diesem timestamp die ausgabe durch

                        Kommentar


                        • #13
                          es gibt verschiedene Möglichkeiten nur die letzte ungelesene Nachrichten zu bekommen und session ist dafür am bestens geeignet.
                          z.b.s
                          1)bei ankommender Abfrage schaust du die ID von der Letzter gesendeter Nachricht, die in $_SESSION['last_mesage_ID'] gespeichert ist
                          2)senden von Nachrichten an Client die höhere ID haben, und danch die $_SESSION['last_mesage_ID'] mit der gröster mesageID die gesendet wurde überschreiben.

                          und keine Panik!
                          Ajax hat nichts gegen Session.
                          Slava
                          bituniverse.com

                          Kommentar


                          • #14
                            Original geschrieben von Slava
                            es gibt verschiedene Möglichkeiten nur die letzte ungelesene Nachrichten zu bekommen und session ist dafür am bestens geeignet.
                            z.b.s
                            1)bei ankommender Abfrage schaust du die ID von der Letzter gesendeter Nachricht, die in $_SESSION['last_mesage_ID'] gespeichert ist
                            2)senden von Nachrichten an Client die höhere ID haben, und danch die $_SESSION['last_mesage_ID'] mit der gröster mesageID die gesendet wurde überschreiben.

                            und keine Panik!
                            Ajax hat nichts gegen Session.
                            1.okay... das mit der session wäre sicher noch einfacher...
                            den wert dafür steht mir ja immer zur verfügung und kann jederzeit geändert werden.. das kapier ich und lässt sich umsetzen.

                            2. entweder ist es zu spät oder ich zu blöd
                            verstehe die ansage noch nicht.

                            was mir aber grad mehr sorgen macht, .. ich hab keine bzw kaum js kenntnisse (arbeite dran) .... und um die ganze sache umzusetzen müßte ich mit dem innerHTML umgehen können...
                            denn bisher überschreibe ich ja immer das div-element...
                            für diese vorgehensweise müßte ich aber jede neue ausgabe anfügen, statt zu überschreiben... und da hakts auch im moment.

                            da ich das mit dem anfügen statt überschreiben schon mal versucht habe, wurde mir auch mal dieser ansatz gepostet...
                            aber irgendwie konnte ich das bisher nicht mit meiner ausgabe kombinieren

                            PHP-Code:
                            <script type="text/javascript">
                            <!--
                            var 
                            inhalt_alt document.getElementById('asb_content').innerHTML;
                            var 
                            inhalt_neu xmlHttp.responseText
                            document.getElementById('asb_content').innerHTML inhalt_neu inhalt_alt;
                            -->
                            </
                            script

                            Kommentar


                            • #15
                              das sieht schon mal gut aus, aber du muss statt
                              document.getElementById('asb_content').innerHTML = inhalt_neu + inhalt_alt;

                              document.getElementById('asb_content').innerHTML = inhalt_alt+
                              inhalt_neu;

                              schreiben
                              Slava
                              bituniverse.com

                              Kommentar

                              Lädt...
                              X