Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Podwójne wykonawanie skryptu przy obciążeniu
Deusx
post 26.02.2012, 21:13:05
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


Witam !

Mam w serwisie system przeliczania niektórych elementów, ogólnie jest on ustawiony co 3 sek (poprzez bazę danych). W skrócie wygląda to tak:

  1. $przylot = doquery("SELECT * FROM {{table}} WHERE `fleet_end_time` <= '".time()."' AND `fleet_mess` > '0' ORDER BY `fleet_end_time` ASC ", 'fleets');
  2. if($przylot) {
  3. doquery("LOCK TABLE {{table}}aks WRITE, {{table}}lunas WRITE, {{table}}rw WRITE, {{table}}errors WRITE, {{table}}messages WRITE, {{table}}fleets WRITE, {{table}}planets WRITE, {{table}}galaxy WRITE ,{{table}}users WRITE, {{table}}statpoints WRITE, {{table}}push WRITE, {{table}}ignore WRITE", "");
  4.  
  5. while ($CurrentFleet = mysql_fetch_array($przylot)) {
  6. switch ($CurrentFleet["fleet_mission"]) {
  7. case 1:
  8. misja1 ( $CurrentFleet );
  9. break;
  10.  
  11. case 2:
  12. misja2( $CurrentFleet );
  13. break;
  14.  
  15. default: {
  16. doquery("DELETE FROM {{table}} WHERE `fleet_id` = '". $CurrentFleet['fleet_id'] ."';", 'fleets');
  17. }
  18. }
  19. }
  20. doquery("UNLOCK TABLES", "");
  21. }



kod działa, jednak średnio raz na 2.000 przeliczeń dzieją się rzeczy typu:
case 1 misja1 ( $CurrentFleet ); wykona się dwa razy, pomnażając obytek użytkownika (czy misja 2, zależnie jaką misje wybierze uzytkownik).
Wykona się dwa razy, użytkownik dostanie dwie wiadomości o przeliczeniu ale dobytek pozostaje bez zmian.

Skrypt na testach działał wyśmienicie, jednak gdy przyszło do gry kilkuset graczy niestety już tak kolorowo nie jest. Proszę o wypowiedź kogoś doświadczonego. Skrypt działa z bazą mysql.

Ten post edytował Deusx 26.02.2012, 21:15:52
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:46