Datenverteilung an User


son gohan

Erfahrenes Mitglied
Hallo,

ich habe eine Frage.

Nehmen wir an wir haben 1000 User und wir muessen an diese User jede Sekunde neue Daten sende, sagen wir wegen einem Spiel oder sonstigen Service.

Mit welcher technik macht man diese Datenverteilung am besten?

Ideen von mir bisher waren so:

1. Ich erstelle fuer jeden User eine eigene Datei mit Usernamen und der user bekommt von mir ein Programm das jede Sekunde ueber HTTP Request die Daten aus der Datei lest.

2. Jeder User bekommt ein Programm das jede Sekunde aus der gleichen Datei lest, wo die noetigen Daten drine stehen.

Bei der Idee 1 habe ich gedacht das es von der Performance her eher machbar ist, weil wenn so viele Leute gleichzeitig auf die gleiche Datei zugreifen wie bei Idee 2 dann koennte es doch zu schnell zu ueberbelastung ausfall kommen.

Aber insgesam wuerde ich mich freuen wenn jemand mir sagen kann was hier eine professionale gaengige Methode ist das zu machen, vielleicht auch ein Tipp zu einem Online Tutorial wo ich eine fertige Loesung nachbauen kann waere toll.

Die Mittel die ich zur Verfuegung habe sind ein Webspace packet bei einm Webhoster mit PHP und eine MYsql datenbank wo die Daten drine stehen und auch alle User an welche die daten verteilt werden sollen, stehen in der Mysql Datenbank.
 

erik s.

Erfahrenes Mitglied
Das kommt ganz darauf an, über welche Schnittstelle bzw. welches Protokoll die User mit deinem Server sonst kommunizieren oder ob das die einzige Verbindung zum Server ist.
Implementierst du bspw. ein BrowserGame, so kannst du getrost im Hintergrund ein Script im Intervall aufrufen, welches die Daten jede Sekunde vom Server holt. Diese Kommunikation wiederum kannst du dann via AJAX, meinetwegen auch SOAP und PHP realisieren.
Was für bzw. wie viele Daten müssen denn die User abrufen?


Grüße,
Erik
 

son gohan

Erfahrenes Mitglied
Hallo,

die Daten welche ich versenden will sind Signale fuer Devisenhandel.
Und die Sender und Empfaenger sind Handelsplatformen fuer Devisenhandel.

Ich kann mit meiner Handelsplattform die Signale in meine MySQL Datenbank schreiben und normalerweise kann ich auch die anderen Empfaenger direkt von einer HTML Seite oder aehnliches die Signale ablesen lassen.

Aber ich frage mich ob das eine gute Loesung so waere, denn wenn beispielweise jede Sekunde 1000 Empfaenger die gleiche HTML Seite aufrufen und jedesmal auch eine Abfrage zur Datenbank gesendet wird um Daten zu lesen usw. das ist doch viel zu aufwendig dann der Server stuertzt dann doch bestimmt staendig ab oder aehnliche probleme entstehen dann doch bestimmt oder?
 

slowfly

Erfahrenes Mitglied
Salve

Die Mechanismen, die beschrieben werden, sind Polling-Mechanismen. Als Alternative gibt es WebSockets, da pollt der Client nicht den Server, sondern der Server sendet dem Client, wenn's was neues gibt. Heisst aber auch, dass der Client zum Server einen TCP/IP-Connect offen hält, was je nachdem auch zu anderen Problemen führen kann (Webserver muss sozusagen 1000 Connections gleichzeitig offen halten können)

Ich gehe davon aus, dass du irgendwo noch einen Webserver davorgeschaltet hast. Im Apache zum Beispiel kann man ein Caching aktivieren (mod_cache). Den müsste man auch so konfigurieren, dass er z.B. nur einmal pro Minute den Request tatsächlich nach hinten zum Applikationsserver weitergibt. Auch wenn's einmal pro Sekunde ist, hast du 999 Requests/s auf dem Applikationsserver gespart.

Bezüglich abstürzen: Das kommt auf die ganze Architektur drauf an. Das fängt bei einer genug grossen Anbindung an und hört hinten beim MySQL-Server auf. Also schlussendlich kommt's aufs Geld drauf an ;-) -> Aber prinzipiell machbar.

Gruss,
slowy
 

son gohan

Erfahrenes Mitglied
Salve

Die Mechanismen, die beschrieben werden, sind Polling-Mechanismen. Als Alternative gibt es WebSockets, da pollt der Client nicht den Server, sondern der Server sendet dem Client, wenn's was neues gibt. Heisst aber auch, dass der Client zum Server einen TCP/IP-Connect offen hält, was je nachdem auch zu anderen Problemen führen kann (Webserver muss sozusagen 1000 Connections gleichzeitig offen halten können)

Ich gehe davon aus, dass du irgendwo noch einen Webserver davorgeschaltet hast. Im Apache zum Beispiel kann man ein Caching aktivieren (mod_cache). Den müsste man auch so konfigurieren, dass er z.B. nur einmal pro Minute den Request tatsächlich nach hinten zum Applikationsserver weitergibt. Auch wenn's einmal pro Sekunde ist, hast du 999 Requests/s auf dem Applikationsserver gespart.

Bezüglich abstürzen: Das kommt auf die ganze Architektur drauf an. Das fängt bei einer genug grossen Anbindung an und hört hinten beim MySQL-Server auf. Also schlussendlich kommt's aufs Geld drauf an ;-) -> Aber prinzipiell machbar.

Gruss,
slowy
Hallo,

danke fuer deine Unterstuetzung. Ich werde versuchen das jetzt so zu bauen das die Leute von einer Seite die auf meinem Webserver liegt die Daten auslesen sollen. Wenn ich sehe das das nicht gut genug funktioniert kann ich wieder neue Loesungen suchen.

Ich bin noch am ueberlegen wegen einer Sache, wenn ich beispielweise 1000 einzelne Seiten erstelle, fuer jeden User eine eigene Seite sozusagen, denkt ihr das waere sparsamer und einfacher fuer den Server das zu verarbeiten, weil wenn 1000 leute gleichzeitig die gleiche Seite auslesen wollen ist das vielleicht schwieriger fuer den Server zu verarbeiten als wenn 1000 leute eine einzelne Seite aufrufen oder?