2 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3 <title>4.2. Entwicklung unter FastCGI</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.6.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="next" href="ch04s03.html" title="4.3. Programmatische API-Aufrufe"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.2. Entwicklung unter FastCGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.2. Entwicklung unter FastCGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.fcgi"></a>4.2. Entwicklung unter FastCGI</h2></div></div></div><div class="sect2" title="4.2.1. Allgemeines"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.general"></a>4.2.1. Allgemeines</h3></div></div></div><p>Wenn Änderungen in der Konfiguration von kivitendo gemacht
4 werden, muss der Webserver neu gestartet werden.</p><p>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
5 achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
6 müssen folgende Aspekte beachtet werden.</p></div><div class="sect2" title="4.2.2. Programmende und Ausnahmen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.exiting"></a>4.2.2. Programmende und Ausnahmen</h3></div></div></div><p>Betrifft die Funktionen <code class="function">warn</code>,
7 <code class="function">die</code>, <code class="function">exit</code>,
8 <code class="function">carp</code> und <code class="function">confess</code>.</p><p>Fehler, die dass Programm normalerweise sofort beenden (fatale
9 Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
10 am Laufen zu halten. Man kann mit <code class="function">die</code>,
11 <code class="function">confess</code> oder <code class="function">carp</code> Fehler
12 ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
13 eigene <code class="function">$::form-</code>error()> tut im Prinzip das
14 Gleiche, mit ein paar Extraoptionen. <code class="function">warn</code> und
15 <code class="function">exit</code> hingegen werden nicht abgefangen.
16 <code class="function">warn</code> wird direkt nach STDERR, also in Server Log
17 eine Nachricht schreiben (sofern in der Konfiguration nicht die
18 Warnungen in das kivitendo Log umgeleitet wurden), und
19 <code class="function">exit</code> wird die Ausführung beenden.</p><p>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
20 beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
21 Ausnahme sein. Quintessenz: Bitte kein <code class="function">exit</code>
22 benutzen, alle anderen Exceptionmechanismen sind ok.</p></div><div class="sect2" title="4.2.3. Globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.globals"></a>4.2.3. Globale Variablen</h3></div></div></div><p>Um zu vermeiden, dass Informationen von einem Request in einen
23 anderen gelangen, müssen alle globalen Variablen vor einem Request
24 sauber initialisiert werden. Das ist besonders wichtig im
25 <code class="varname">$::cgi</code> und <code class="varname">$::auth</code> Objekt, weil
26 diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
27 werden.</p><p>In <code class="classname">SL::Dispatcher</code> gibt es einen sauber
28 abgetrennten Block, der alle kanonischen globalen Variablen listet und
29 erklärt. Bitte keine anderen einführen ohne das sauber zu
30 dokumentieren.</p><p>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
31 man sicher geht, dass man die richtige erwischt.</p></div><div class="sect2" title="4.2.4. Performance und Statistiken"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.performance"></a>4.2.4. Performance und Statistiken</h3></div></div></div><p>Die kritischen Pfade des Programms sind die Belegmasken, und
32 unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
33 Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
34 4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
35 sind es je nach Menge der definierten Variablen 1-2s. Ab der
36 Moose/Rose::DB Version sind es 5-6s.</p><p>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
37 den kritischen Pfaden, unter 0,15 sonst.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.3. Programmatische API-Aufrufe</td></tr></table></div></body></html>