Frage Liveticker Realisierung

NiciB

Erfahrenes Mitglied
Hallo!

Ich hab für einen Eishockey Verein einen Liveticker gemacht. Nun hat es aber ein paar Probleme gegeben. Hier ist der Ticker zu sehen.

Momentan ist er so aufgebaut, dass die einzelnen Zeilen in einer Datenbank gespeichert werden und alle 30 Sekunden neu abgerufen. Letztes Mal gab es Probleme mit der Anzahl der maximalen Benutzer bei der Datenbank. Aber auch sonst war er sehr lahm. Natürlich sind es auch relativ viele Datenbankabfragen die alle 30 Sekunden von jedem Benutzer abgefragt werden.

Hat jemand einen Vorschlag wie man so einen Ticker noch realisieren könnte? Oder muss ich einfach auf einen anderen Server umziehen, damit ich keine Performance Probleme mehr hab? Momentan bin ich bei all-inkl mit WebPrivat L.
 
Zuletzt bearbeitet:
hoppala... Habe den Link oben jetzt eingefügt. Letztes mal gab es doch erhebliche Probleme mit der Geschwindigkeit und eine MySQL Fehlermeldung gab es auch: User .... has already more than 'max_user_connections' active connections
Also zu viele Benutzer die verbunden sind.
 
der PHP Code für den Ticker wäre jetzt noch interessant, denn für den Ticker reicht eigentlich eine Query pro Seitenaufruf.

btw "unbekanntes Dokument". Du solltest der Seite einen Titel geben :)
 
Zuletzt bearbeitet:
naja, ich habe doch mehrere Queries pro Seitenaufruf, da ich die Daten in mehreren Tabellen gespeichert habe und je nach Ereignis auch nur gewisse Daten gebraucht werden. Die werden dann halt immer einzeln abgerufen, also hab ich pro Zeile weitere SQL Abfragen.
 
ich hab keine Ahnung was ich da posten soll, darum poste ich mal alles... aber der Code ist weder schön noch effizient. Ist mehr eine quick and dirty Lösung. Das ist jetzt die ganze Seite (HTML und PHP zusammen)

PHP:
<html>
<head>
<title>EHC Lustenau - Liveticker</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="refresh" content="30">
<style type="text/css">
<!--
@import url(ehc.css);
.Stil1 {color: #f9f701}
.Stil3 {font-size: 16pt}
.Stil4 {color: #f9f701; font-weight: bold}


-->
</style>
</head>

<body>
<?php
/* AKTIONEN
1	tor ehc
2	strafe ehc
3	tor gegner
4	strafe gegner
5	nur kommentar
6	penalty ehc
7	penalty gegner
8	Beginn 1. Drittel
9	Ende 1. Drittel
10	Beginn 2. Drittel
11	Ende 2. Drittel
12	Beginn 3. Drittel
13	Ende 3. Drittel
14	Beginn Verlängerung
15	Ende Verlängerung
16	Penaltyschießen
17	Spielende */
include("admin/functions.php");
include("db.inc");
$saison_id=$_GET[saison_id];
$spiel_id=$_GET[spiel_id];
if($_GET[from]=="ehc"){
	$gruen='#009900';
	$gelb='#CCCCCC';	
	}else{
	$gruen='#1C8119';
	$gelb='#CCCCCC';
	}	
$sql="select * from ".$saison_id."_spiele where spiel_id=".$spiel_id;
$query=mysql_query($sql, $db) or die("1: ".mysql_error());
$result=mysql_fetch_row($query);
$ehc=0;
$gegner=0;
$wo="";

if(substr_count(getname($result[3]), "Lustenau")>0){
	$ehc=$result[3];
	$gegner=$result[4];
	$wo="heim";
	}
if(substr_count(getname($result[4]), "Lustenau")>0){
	$ehc=$result[4];
	$gegner=$result[3];
	$wo="gast";
	}
$heim=1;
$gast=3;
$strafeheim=2;
$strafegast=4;
if($wo=="gast"){
	$heim=3;
	$gast=1;
	$strafeheim=4;
	$strafegast=2;	
}
?>
<table width="1000" border="0" cellpadding="8" cellspacing="0" class="fenster">
  <tr>
    <td colspan="4" class="fenstertop"><div align="center"> 
      <p><img src="bilder/vereine/kl_<?php echo geticon($result[3]); ?>" border="1"> <span class="Stil3"><?php echo getname($result[3]); ?> <span class="Stil1">vs.</span></span> <span class="Stil3"><?php echo getname($result[4]); ?></span> <img src="bilder/vereine/kl_<?php echo geticon($result[4]); ?>" border="1"></p>
      <p><?php echo '<table bgcolor="#000000" class="fenster" cellpadding="8" cellspacing="0"><tr><td><span class="Stil3"><b>'.gettoreheim($spiel_id, $saison_id, $result[3], $heim).'</b></span></td><td><span class="Stil3">('.gettoreheimdrittel($spiel_id, $saison_id, $result[3], $heim, 1).':'.gettoregastdrittel($spiel_id, $saison_id, $result[4], $gast, 1).', '.gettoreheimdrittel($spiel_id, $saison_id, $result[3], $heim, 3).':'.gettoregastdrittel($spiel_id, $saison_id, $result[4], $gast, 3).', '.gettoreheimdrittel($spiel_id, $saison_id, $result[3], $heim, 5).':'.gettoregastdrittel($spiel_id, $saison_id, $result[4], $gast, 5).')</span></td><td class="fensterrechts"><span class="Stil3"><b>'.gettoregast($spiel_id, $saison_id, $result[4], $gast).'</b></span></td></tr></table>'; ?>Ticker wird alle 30 Sekunden automatisch neu geladen!</p>
    </div></td>
  </tr>
  <tr>
    <td width="250" valign="top"><table width="100%" border="1" cellpadding="1" cellspacing="0" class="fenster">
      <tr class="fensterbody">
        <td colspan="2" bgcolor="#1C8119" class="fensteruntenrechts"><div align="center"><strong>Torfolge</strong></div></td>
        </tr>
      
        <?php
		$sql='select * from '.$saison_id.'_ticker where spiel_id='.$spiel_id.' and (aktion=1 or aktion=3)';
		$query=mysql_query($sql, $db);
		$h=0;
		$g=0;
		while($result=mysql_fetch_array($query)){
		$d="";
		$m=$result[minuten];
		$s=$result[sekunden];	
		if($m<10)
			$m="0".$m;
		if($s<10)
			$s="0".$s;		
		if($result[drittel]==1)
			$d="1. Dr.";
		if($result[drittel]==3)
			$d="2. Dr.";
		if($result[drittel]==5)
			$d="3. Dr.";
		if($result[drittel]==7)
			$d="OT";
		echo '<tr><td class="fensterrechts">'.$m.':'.$s.' </td>';										
		if($wo=="heim"){
			if($result[team]==$ehc){
				$h++;
				echo '<td class="fensterrechts"><b> '.$h.':'.$g.' '.getscorer_ehc1($saison_id, $result[eintrag_id]).'</b></td></tr>';
			}
			else{
				$g++;
				echo '<td class="fensterrechts"> '.$h.':'.$g.' '.getscorer_gegner1($saison_id, $result[eintrag_id]).'</td></tr>';
				}
		}
		if($wo=="gast"){
			if($result[team]==$ehc){
				$g++;
				echo '<td class="fensterrechts"><b> '.$h.':'.$g.' '.getscorer_ehc1($saison_id, $result[eintrag_id]).'</b></td></tr>';
			}
			else{
				$h++;
				echo '<td class="fensterrechts"> '.$h.':'.$g.' '.getscorer_gegner1($saison_id, $result[eintrag_id]).'</td></tr>';
				}
		}		
	
		}
      	?>
	
    </table>      
      <p>&nbsp;</p>
      <table width="100%" border="1" cellpadding="1" cellspacing="0" class="fenster">
        <tr class="fensterbody">
          <td colspan="3" bgcolor="#1C8119" class="fensteruntenrechts"><div align="center"><strong>Strafminuten</strong></div></td>
        </tr>
        <tr>
          <td class="fensteruntenrechts"><div align="center"><strong>Drittel</strong></div></td>
          <td class="fensteruntenrechts"><div align="center"><strong>Heim</strong></div></td>
          <td class="fensteruntenrechts"><div align="center"><strong>Gast</strong></div></td>
        </tr>
        <tr>
          <td width="33%" class="fensterrechts"><p align="center">1</p>          </td>
          <td width="33%" class="fensterrechts"><div align="center"><?php echo getstrafminuten($saison_id, $strafeheim, 1, $spiel_id); ?></div></td>
          <td width="33%" class="fensterrechts"><div align="center"><?php echo getstrafminuten($saison_id, $strafegast, 1, $spiel_id); ?></div></td>
        </tr>
        <tr>
          <td width="33%" class="fensterrechts"><p align="center">2</p>          </td>
          <td width="33%" class="fensterrechts"><div align="center"><?php echo getstrafminuten($saison_id, $strafeheim, 3, $spiel_id); ?></div></td>
          <td width="33%" class="fensterrechts"><div align="center"><?php echo getstrafminuten($saison_id, $strafegast, 3, $spiel_id); ?></div></td>
        </tr>
        <?php
		if(getdrittel1($saison_id, 7)==true)
			$c="fensterrechts";
		else
			$c="fensteruntenrechts";	
		?>
		<tr>
          <td width="33%" class="<?php echo $c; ?>"><p align="center">3</p>          </td>
          <td width="33%" class="<?php echo $c; ?>"><div align="center"><?php echo getstrafminuten($saison_id, $strafeheim, 5, $spiel_id); ?></div></td>
          <td width="33%" class="<?php echo $c; ?>"><div align="center"><?php echo getstrafminuten($saison_id, $strafegast, 5, $spiel_id); ?></div></td>
        </tr>
        <?php
		if(getdrittel1($saison_id, 7)==true)
        echo '<tr>
          <td width="33%" class="fensteruntenrechts"><div align="center">OT</div></td>
          <td width="33%" class="fensteruntenrechts"><div align="center">'.getstrafminuten($saison_id, $strafeheim, 7, $spiel_id).'</div></td>
          <td width="33%" class="fensteruntenrechts"><div align="center">'.getstrafminuten($saison_id, $strafegast, 7, $spiel_id).'</div></td>
        </tr>';		
		?>
		<tr>
          <td width="33%" class="fensterrechts"><p align="center"><strong>gesamt</strong></p>          </td>
          <td width="33%" class="fensterrechts"><div align="center"><strong><?php echo getstrafminutenall($saison_id, $strafeheim, $spiel_id); ?></strong></div></td>
          <td width="33%" class="fensterrechts"><div align="center"><strong><?php echo getstrafminutenall($saison_id, $strafegast, $spiel_id); ?></strong></div></td>
        </tr>						
          </table></td>
    <td width="77%" colspan="3" valign="top" class="fensterrechts"><table width="100%" cellspacing="0" cellpadding="5" class="fenster4">
      	
		<?php

		$farbe="";
		$sql='select * from '.$saison_id.'_ticker where spiel_id='.$spiel_id.' order by eintrag_id desc';
		$query=mysql_query($sql, $db);
		$farbe=$gelb;
		while($result=mysql_fetch_array($query)){
		$zeit="";
		$aktion="";
		$kommentar=$result[kommentar];
		//if($result[aktion]!=2 && $result[aktion]!=4)
			
		if($result[minuten]>0 || $result[sekunden]>0){
			$minuten=$result[minuten]; $sekunden=$result[sekunden];
			if($result[minuten]<10)
				$minuten="0".$result[minuten];
			if($result[sekunden]<10)
				$sekunden="0".$result[sekunden];				
			$zeit=$minuten.":".$sekunden;
		}
			
		if($result[aktion]>7){
			$t="";
			
			
			switch($result[aktion]){
				case 8: $t="Beginn 1. Drittel"; $f=true; break;
				case 9: $t="Ende 1. Drittel"; break;
				case 10: $t="Beginn 2. Drittel"; $f=false; break;
				case 11: $t="Ende 2. Drittel"; break;				
				case 12: $t="Beginn 3. Drittel"; $f=true; break;
				case 13: $t="Ende 3. Drittel"; break;
				case 14: $t="Beginn Verlängerung"; $f=false; break;
				case 15: $t="Ende Verlängerung"; break;	
				case 16: $t="Penaltyschießen"; $f=true; break;
				case 17: $t="Spielende"; break;							
			}
			$farbe=$gruen;
			echo '<tr><td bgcolor="'.$farbe.'" colspan="3"><span class="Stil4">'.$t.'</span></td><td bgcolor="'.$gelb.'">'.$kommentar.'</td></tr>';
			$farbe=$gelb;
			#if($f==true)
			#	$farbe=$gelb;
			#if($f==false)
			#	$farbe=$gruen;	
			}
		else if($result[aktion]==1){
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60"><b>TOR </b></td><td width="50" bgcolor="'.$farbe.'"><img src="bilder/vereine/skl_'.geticon($result[team]).'" border="1"></td><td bgcolor="'.$farbe.'">Torschütze: <b>'.getscorer_ehc($saison_id, $result[eintrag_id]).'</b>';
			if($result[kommentar]!="")
				echo '<p>'.$result[kommentar].'</p>';
			echo '</td></tr>';		
		}
		else if($result[aktion]==3){
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60"><b>TOR </b></td><td width="50" bgcolor="'.$farbe.'"><img src="bilder/vereine/skl_'.geticon($result[team]).'" border="1"></td><td bgcolor="'.$farbe.'">Torschütze: <b>'.getscorer_gegner($saison_id, $result[eintrag_id]).'</b>';
			if($result[kommentar]!="")
				echo '<p>'.$result[kommentar].'</p>';
			echo '</td></tr>';		
		}	
		else if($result[aktion]==2 || $result[aktion]==4){
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60"><b>STRAFE</b></td><td width="50" bgcolor="'.$farbe.'"><img src="bilder/vereine/skl_'.geticon($result[team]).'" border="1"></td><td bgcolor="'.$farbe.'">'.getstrafe($saison_id, $result[eintrag_id], $result[aktion]);			
		if($result[kommentar]!="")
			echo '<p>'.$result[kommentar].'</p>';
		echo '</td></tr>';			
		}
		else if($result[aktion]==6){
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60"><b>Penalty </b></td><td width="50" bgcolor="'.$farbe.'"><img src="bilder/vereine/skl_'.geticon($result[team]).'" border="1"></td><td bgcolor="'.$farbe.'"><b>'.getspielervorname($result[kommentar]).' '.getspielernachname($result[kommentar]);
			if($result[trifft]=="y")
				echo ' - trifft';
			else
				echo ' - verschießt';	
			echo '</b></td></tr>';			
		}
		else if($result[aktion]==7){
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60"><b>Penalty </b></td><td width="50" bgcolor="'.$farbe.'"><img src="bilder/vereine/skl_'.geticon($result[team]).'" border="1"></td><td bgcolor="'.$farbe.'"><b>'.$result[kommentar];
			if($result[trifft]=="y")
				echo ' - trifft';
			else
				echo ' - verschießt';	
			echo '</b></td></tr>';	
		}				
		else{
			
			echo '<tr><td bgcolor="'.$farbe.'" width="40">'.$zeit.'</td><td bgcolor="'.$farbe.'" width="60">'.$aktion.'</td><td width="50" bgcolor="'.$farbe.'"></td><td bgcolor="'.$farbe.'">'.$kommentar.'</td></tr>'; 
			
			}
      	
		echo '<tr><td bgcolor="'.$farbe.'" colspan="4"><hr></td></tr>';
		}
		
		?>
        </table></td>
  </tr>
</table>
</body>
</html>
 
ja da passiert doch recht viel ;)

Aber schonmal was zu den Max Connections bzw. Max User. Das kannst du mit folgendem Code vermeiden.

Füge ganz unten
PHP:
mysql_close($db);
ein. Am besten unter dem </html>

die Includes oben könnte man auch in include_once() ändern.

PHP:
include_once("admin/functions.php");
include_once("db.inc");
 
Zuletzt bearbeitet:
Ich wärme mal meinen alten Beitrag wieder auf...

ich habe jetzt meinen Ticker so umgeschrieben, dass die Besucher keine Datenbankabfrage mehr auslösen sondern nur noch eine statische HTML Seite aufrufen. Das Performance Problem besteht aber immer noch.
Ich bin auf einem Server mit max. 100 Kunden, kann das für sowas schon zu viel sein? Muss ich vielleicht auf einen Server mit max. 50 Kunden umsteigen?

Gibt es irgendwelche Tools um solche Aufrufe zu simulieren und die Performance zu testen?
 
Zurück