• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

PHP/VanillaJS Long Polling Chat

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
Ich würde gerne für ein Projekt einen Chat schreiben mit der Long Polling-Technik, habe dazu aber noch nichts Nützliches gefunden, was mich an dieser Stelle weiter bringt. WebSockets möchte ich nicht verwenden, da es nicht 100%ig kompatibel mit allen Browsern ist. Wie funktioniert nun Long Polling?
Würde mich freuen, wenn mir hier jemand weiterhelfen könnte.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Dein Problem ist das du offensichtlich noch nicht mal weisst was du vorhast, arbeite erst mal an der Zielsetzung.

Der Startpost klingt nach Marketing bevor man ein Produkt hat. Irgendwas mit Blockchain!
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #3
Ich kenne schon mein Ziel. Ich kann es hier gerne auch erklären, aber ich wollte nur grundsätzlich etwas über Long Polling erfahren. Mehr nicht. Andere Frage, kannst du mir weiterhelfen? Kennst du dich damit aus?

Falls ja, angenommen ich habe ein Formular mit einer Textbox und einem Submitbutton. Darüber befindet sich das Chatfenster. Wie genau nutze ich nun Long Polling um an die Daten zu kommen, die mein Chatpartner abschickt? Also wie komme ich per AJAX (Long Polling) an meine Daten? Was muss ich beachten beim JavaScript und was beim PHP-Backend?
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Es scheint mir technisch keine bersonders elegante Lösung zu sein, zumindest nicht für einen Chat und Browser mochten es zumindest in der Vergangenheit nicht besonders.

Es liegt einfach in der Natur der Sache das "Long Polling" nur die Wiederbelebung eines Problems ist das man vor Jahrzehnten durch den Pseudonversationsmodus gelöst hat. Zumindest sieht es für mich stark danach aus, insbesondere im Chat Kontext. Deswegen denke ich das du eben nicht weisst was du willst.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #5
Es ist aber besser als jede halbe Sekunde die Daten per AJAX abzufragen, das würde den Server irgendwann überlasten. Ob elegant oder nicht, das lass mal meine Entscheidung sein. Oder kannst du mir eine Alternative außer WebSockets vorschlagen?
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Würde es eben nicht. Also lag ich richtig.

Zumal 500ms sowieso schon meines Erachtens eine viel zu hohe Frequenz für einen chat ist. Die hälfte würds vermutlich tun.

Erkundige dich mal etwas wie Ressourcenmanagement in modernendigitalen Systemen funktioniert, welche Probleme es gibt und wie sie gelöst wurden. Such mal "slowloris dos".
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #7
Also würdest du sagen, ich soll es einfach per AJAX ohne Long Polling machen und gut?
Es geht mir darum, dass es fast Realtime sein soll.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.728
Ort
in der Zukunft
Welcher Browser soll den Probleme machen? Websockets werden doch schon länger von allen unterstütz?
Sonst gibt es diverse Bibliotheken, auch für PHP https://github.com/wisembly/elephant.io die z.b. Auch fallback Szenarien anbieten nur für die die keine socket Verbindung hin bekommen. Socket.io ist da auch noch was...
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #9
Also ich habe es im Chrome nicht zum laufen gebracht. Und da ich den Apache nicht neu konfigurieren kann auf meinem Webspace möchte ich das ohne WebSockets erstellen.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.728
Ort
in der Zukunft
Ja bei webspace dürfte das in der Tat nicht gehen, das liegt dann aber nicht am Browser.
In diesem Fall hast du auch Probleme mit long polling. Im endefeckt sagst du dem Client ja du rufst die Chat.php auf und beim Aufruf der Seite holst du am Server die Infos aus der db, sendest sie und beendest aber nicht das Script sondern lässt es laufen / lässt die Verbindung bestehen. Du prüfst nun ständig nach neuen Einträgen (was übrigens ziemlich prozessorlastig ist) und sendest sie raus. Das geht aber nur solange bis die max execution Time erreicht ist die für deine Scripte gesetzt ist. Die kannst du bei webspace nicht ändern.

Nebenbei ist die Anzahl der Verbindungen in diesem Fall ja eine pro chatter ... Jederzeit.
Wenn du alle 500ms per Ajax frägst und deine ausführzeit bei 10na liegt (der Code zum nachladen sollte nur auth und nachgucken sein) dann hast du pro Sekunde zur selben Zeit weit weniger Verbindungen gleichzeitig als du chattet hast.
Die gesamte Zahl an Anfragen ist erst mal weniger wichtig, das geht maximal auf den Traffic, nicht aber auf die Ressourcen.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #11
Ja bei webspace dürfte das in der Tat nicht gehen, das liegt dann aber nicht am Browser.
In diesem Fall hast du auch Probleme mit long polling. Im endefeckt sagst du dem Client ja du rufst die Chat.php auf und beim Aufruf der Seite holst du am Server die Infos aus der db, sendest sie und beendest aber nicht das Script sondern lässt es laufen / lässt die Verbindung bestehen. Du prüfst nun ständig nach neuen Einträgen (was übrigens ziemlich prozessorlastig ist) und sendest sie raus. Das geht aber nur solange bis die max execution Time erreicht ist die für deine Scripte gesetzt ist. Die kannst du bei webspace nicht ändern.

Nebenbei ist die Anzahl der Verbindungen in diesem Fall ja eine pro chatter ... Jederzeit.
Wenn du alle 500ms per Ajax frägst und deine ausführzeit bei 10na liegt (der Code zum nachladen sollte nur auth und nachgucken sein) dann hast du pro Sekunde zur selben Zeit weit weniger Verbindungen gleichzeitig als du chattet hast.
Die gesamte Zahl an Anfragen ist erst mal weniger wichtig, das geht maximal auf den Traffic, nicht aber auf die Ressourcen.

Das was du sagst stimmt nicht so ganz, das habe ich z.B. komplett anders verstanden (habe mich dazu natürlich ein bisschen eingelesen). Man prüft nicht ständig nach neuen Daten, man bekommt die Daten, wenn eine Änderung statt gefunden hat bzw. wenn ein neuer Eintrag in der Datenbank vorhanden ist, ansonsten nicht! Frag mich aber nicht wie man das technisch umsetzt, habe nur Theorie gelesen und kein Codebeispiel gesehen. Allerdings hast du natürlich mit der "Max Execution Time" recht, diese macht mir natürlich beim Long Polling ein Strich durch die Rechnung. Daran habe ich gar nicht gedacht.

--- [2018-12-07 13:08 CET] Automatisch zusammengeführter Beitrag ---

Habe mir jetzt überlegt das ganze mit NodeJS zu machen und mit WebSockets. Daher stellt sich gar nicht mehr die Frage nach dem Long Polling bzw. wie man das mit PHP macht. Danke für die Antworten.
 
Zuletzt bearbeitet:

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
896
Short polling -> Anfrage "Gib mir Daten" ... einige ms später -> Da hast Du sie

Long Polling -> Anfrage "Gib mir Daten, ich halte die Verbindung mal offen, und vergesse die Bedeutung eines Timeouts" .........viel später -> Da hast Du sie.

Bei GitHub gibt es einige Projekte dazu (z.B. https://github.com/fidelisrafael/ajax-long-polling-chat )
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
@CPU:
Deswegen mien Hinweis darauf dich mal zu erkundiogen wie Digitaltechnik funktioniert. Insbesondere CPUs kennen nativ kein warten. Wenn du tatsächlich warten würsest würde auch die Reaktionszeit massiv leiden. Effektiv bedeute Longpolling daher auf beiden Sieten deutlich mehr Last für schnellere Reaktionen.

Wenn digital irgendwas wartet braucht es einen externen Anstoß, also kann der externe Anstoßer nicht warten. Wenn ein Client eine Verbindung zu einem Server aufmacht und sagt lass offen. Dann müssen beide Seiten und alle Instanzen dauernd nach Updates checken.

Das verbirgt der Abstraktionslayer lediglich vor dir. Das heisst nicht das es nicht da ist. Zusätzlich muss für offene Verbindungen Permanent der Speicher reserviert bleiben, daher skaliert es auch da erhebllich schlechter.
Also doch, die Antowrt von drfuture stimmt, man muss nur die gesamte Technik berücksichtigen und nicht nur den Abstraktionslayer mit dem man arbeitet.

Anderes Beispiel für die slebe Problematik:
Ich habe eine Knopf, der einen Email an ein Restaurant schickt und eine zahlung druchführt.

Also muss ich nur auf den Knopf drücken, dann bekomme ich Pizza.
=> Knopf drücken = Pizza

Alternativ muss ich zum Laden, alle Zutaten kaufen und mir sleber Pizza machen.
=> man das ist ja total unnötig kompliziert, ich bleib lieber beim Knopf, das ist wesentlich weniger Aufwand. Wie blöd muss man eigentlich sein Pizza zu backen wenn man einfach Knöpfe drücken kann? Warum ist der Scheiss so teuer?
Den blöden Knopf zu drücken dauert doch nichtmal 1 Sekunde!
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #14
Wie gesagt ich löse das Problem jetzt mit Node.js :unknown:
 
Oben