php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.11.2011, 09:35  
Neuer Benutzer
 
Registriert seit: 08.05.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Monti befindet sich auf einem aufstrebenden Ast
Standard Sekündliche Aktualisierung

Hallo,

ich arbeite derzeit an einem Browserspiel, bei welchem es möglich ist, Mitspieler anzugreifen. Angriffe brauchen Zeit, finden also erst zu einem bestimmten Zeitpunkt statt.
Ich müsste jetzt sekündlich eine Abfrage machen, ob neue Kämpfe stattgefunden haben und diese dann berechnen. Jetzt weiß ich aber nicht, wie ich das am Besten löse. Derzeit habe ich zwei Lösungsansätze, bin mir aber nicht sicher, ob die überhaupt Sinn machen.

1. Berechnung durch Client anstoßen
Hierbei wird bei einem Klick eines der beiden betroffenen Clients geprüft, ob neue Angriffe stattgefunden haben, diese dann berechnet und ausgewertet.
Problem: Sollten beide Clients gleichzeitig klicken, und beide Abfragen gleichzeitig gestartet werden, ehe eine der beiden den Angriff als ausgewertet speichert, käme es zu einem doppelten Angriff.
Sollten beide Clients überhaupt nicht klicken, würde der Kampf auch nie stattfinden.

2. Berechnung per Cronjob anstoßen
Hierbei besteht aber das Problem, dass Cronjobs nur minütlich gestartet werden können. Das ließe sich ja umgehen, wenn ich die Datei per sleep(1) auf eine Minute strecke (Berechnungszeit natürlich berücksichtigt). Ich bin mir aber nicht so sicher, ob das besonders performant ist.


Welche Methode wäre die bessere? Oder übersehe ich die logischste?
Schonmal vielen Dank für eure Hilfe.
Monti ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.11.2011, 09:40  
Neuer Benutzer
 
Registriert seit: 08.05.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Monti befindet sich auf einem aufstrebenden Ast
Standard

Eine dritte Möglichkeit würde mir zumindest theoretisch einfallen:
Jeder Benutzer stößt eine Auswertungsdatei an, welche aber nur einmal zeitgleich ausgeführt werden kann. Erst wenn diese beendet ist, kann sie erneut aufgerufen werden. Dadurch sollte es keine doppelten Angriffe mehr geben.
Die Einmaligkeit ließe sich ja durch einen DB-Eintrag gewährleisten.

Wäre diese Variante sinnvoll?
Monti ist offline   Mit Zitat antworten
Alt 05.11.2011, 12:43  
Erfahrener Benutzer
 
Registriert seit: 25.01.2009
Beiträge: 1.027
PHP-Kenntnisse:
Fortgeschritten
Capfly befindet sich auf einem aufstrebenden Ast
Capfly eine Nachricht über ICQ schicken Capfly eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von Monti Beitrag anzeigen
Eine dritte Möglichkeit würde mir zumindest theoretisch einfallen:
Jeder Benutzer stößt eine Auswertungsdatei an, welche aber nur einmal zeitgleich ausgeführt werden kann. Erst wenn diese beendet ist, kann sie erneut aufgerufen werden. Dadurch sollte es keine doppelten Angriffe mehr geben.
Die Einmaligkeit ließe sich ja durch einen DB-Eintrag gewährleisten.

Wäre diese Variante sinnvoll?
Wird die Seite zufällig gleichzeitig aufgerufen, wird der Query doppelt ausgeführt
__________________
MfG
~Capfly
Jetzt NEU! Cpix & Wbits Katahlan.de - Das Browsergame
Capfly ist offline   Mit Zitat antworten
Alt 05.11.2011, 12:57  
Neuer Benutzer
 
Registriert seit: 08.05.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Monti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Capfly Beitrag anzeigen
Wird die Seite zufällig gleichzeitig aufgerufen, wird der Query doppelt ausgeführt
Um einen doppelten Aufruf zu vermeiden müsste ich also die Auswertung vom Server machen lassen, denn der ruft ja nur einmal auf.
Wäre die Methode mit der gestreckten Datei da ratsam? Oder was empfiehlt sich eher?
Monti ist offline   Mit Zitat antworten
Alt 05.11.2011, 18:00  
Erfahrener Benutzer
 
Registriert seit: 06.12.2009
Beiträge: 115
PHP-Kenntnisse:
Fortgeschritten
luks2com zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Du könntest aber auch einen PHP Script über Shell als Prozess laufen lassen, der dann eine schleife hat, die jede Sekunde durchläuft...
Wenn du willst das jede Sekunde gecheckt wird, ob ein Eintrag ist dann gibt es keine Variante, die besser für die perfomence ist...
luks2com ist offline   Mit Zitat antworten
Alt 05.11.2011, 19:20  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

Und muss es unbedingt PHP sein? Mit Java könntest du ein Programm entwickeln, das nichts anderes macht, als solche "Events" zu überprüfen.
Asterixus ist offline   Mit Zitat antworten
Alt 05.11.2011, 20:50  
Neuer Benutzer
 
Registriert seit: 08.05.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Monti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Asterixus Beitrag anzeigen
Und muss es unbedingt PHP sein? Mit Java könntest du ein Programm entwickeln, das nichts anderes macht, als solche "Events" zu überprüfen.
Worin liegt denn der Vorteil von Java im Vergleich zu PHP?
Und was für Voraussetzungen müsste dann mein Server erfüllen?
Monti ist offline   Mit Zitat antworten
Alt 05.11.2011, 20:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bitte Forensuche benutzen! Es gibt hier genug Beiträge über Kampfsysteme, Eventsteuerung und warum PHP nicht die richtige Sprache dafür ist.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 05.11.2011, 21:29  
Neuer Benutzer
 
Registriert seit: 08.05.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Monti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Bitte Forensuche benutzen!
Danke, habe ich mal gemacht und bin tatsächlich fündig geworden. Ich wusste nicht, dass tatsächlich schonmal vor dem gleichen Problem stand.

Ich werds dann wohl in Java lösen.
Monti ist offline   Mit Zitat antworten
Alt 18.03.2012, 11:24  
Neuer Benutzer
 
Benutzerbild von PHPfreak123
 
Registriert seit: 18.03.2012
Beiträge: 15
PHP-Kenntnisse:
Fortgeschritten
PHPfreak123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Antwort

Hallo Monti,
wie ich das sehe, willst du, wenn ein Spieler auf einen Button
klickt, dass der andere dann angegriffen wird.
Das geht viel einfacjer, indem du einfach bei jedem Seitenaufruf (sofern
du mehrere Seiten hast) zu einer Abfrage.
Spart nerviges nachladen bei langsameren PCs und schohnt
die Bandweite
PHPfreak123 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Aktualisierung aller Spieler gleichzeitig befubo PHP Einsteiger 6 16.05.2011 12:35
Aktualisierung in Ausgabe per Radio Button Bravestar2010 PHP Einsteiger 4 08.02.2011 16:51
Automatische Aktualisierung von Tabellen usw. m2m-seb JavaScript, Ajax und mehr 2 30.08.2010 08:32
php-Formular und Position nach Aktualisierung kl3000 Datenbanken 7 18.06.2010 21:00
div-display reset nach aktualisierung wupf JavaScript, Ajax und mehr 1 15.03.2010 15:17
Automatische Änderung nur nach Aktualisierung?! warstel PHP Tipps 2010 5 22.01.2010 13:38
aktualisierung eines Formulars aus datenbank karl 78 Datenbanken 8 06.09.2009 23:39
Aktualisierung DkPow3r PHP-Fortgeschrittene 3 11.05.2009 12:26
Fileserver: Aktualisierung Mysql und Ausgabe PHP tausche Server, Hosting und Workstations 8 27.01.2009 09:30
[Erledigt] Auslesung aus 4 Dateien - Letzte Aktualisierung am Baghira PHP Tipps 2008 0 24.08.2008 17:55
datei laden ohne aktualisierung bzw F5 TaStEn PHP Tipps 2007 10 13.12.2005 20:49
Seiten aktualisierung von einer anderen seite auslösen PHP Tipps 2005 4 09.05.2005 21:05
Gästebuch , Aktualisierung trägt nochmal ein PHP Tipps 2005 3 13.02.2005 12:29
letze Aktualisierung hans.karl2 PHP-Fortgeschrittene 5 26.01.2005 18:11

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cronjob minütlich, fortgeschrittene aktualisierung einer seite geht

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum