<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coderblog</title>
	<atom:link href="http://www.uwserver.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.uwserver.de</link>
	<description>Alles rund um Webapplikationen</description>
	<lastBuildDate>Thu, 01 Apr 2010 12:24:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Blog is going down soon / Der Blog schlie&#223;t bald</title>
		<link>http://www.uwserver.de/?p=87</link>
		<comments>http://www.uwserver.de/?p=87#comments</comments>
		<pubDate>Thu, 01 Apr 2010 12:22:11 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=87</guid>
		<description><![CDATA[This blog is going down as a newer version of this blog is being published over here: http://www.cw-internetdienste.de/blog/
Thanks!
Dieser Blog wird bald geschlossen, da es bereits eine neuere, aktuellere Version gibt: http://www.cw-internetdienste.de/blog/
Danke!]]></description>
			<content:encoded><![CDATA[<p>This blog is going down as a newer version of this blog is being published over here: <a href="http://www.cw-internetdienste.de/blog/">http://www.cw-internetdienste.de/blog/</a></p>
<p>Thanks!</p>
<p>Dieser Blog wird bald geschlossen, da es bereits eine neuere, aktuellere Version gibt: <a href="http://www.cw-internetdienste.de/blog/">http://www.cw-internetdienste.de/blog/</a></p>
<p>Danke!</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=87</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chat via Socketserver und JavaScript Teil 1</title>
		<link>http://www.uwserver.de/?p=66</link>
		<comments>http://www.uwserver.de/?p=66#comments</comments>
		<pubDate>Thu, 19 Feb 2009 11:52:18 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[socketbridge]]></category>
		<category><![CDATA[sockets]]></category>
		<category><![CDATA[socketserver]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=66</guid>
		<description><![CDATA[Ich werde eine kurze &#220;bersicht &#252;ber die ben&#246;tigten Techniken, Klassen und Funktionen geben um einen SocketServer, sowie das ben&#246;tigte Frontend zu schreiben.]]></description>
			<content:encoded><![CDATA[<p>Dass Sockets via <acronym title="Pre-Hypertext Processing">PHP</acronym> zu programmieren sind, ist mittlerweile vielen bekannt; doch dass man &#252;ber einen kleinen Trick Sockets auch ohne Probleme in JavaScript nutzen kann, ist den Meisten noch weitgehend fremd. Ich habe diese Techniken bei <a href="http://www.cwidget.de" target="_blank">CWidget</a> erfolgreich verwendet und m&#246;chte hier einen kurzen Einblick in die Umsetzung geben. Im ersten Teil dieses Artikels werden wir uns lediglich mit der serverseitigen Programmierung besch&#228;ftigen.</p>
<p>Um einen Socket-Server effektiv betreiben zu k&#246;nnen, ist ein Root-Server dringend notwendig, denn der Socket-Server muss kontinuierlich als Dienst laufen. Zum Testen und Entwickeln kann man ihn vorerst auch im Browser starten; doch nach einiger Zeit wird es unweigerlicher zum Stillstand des Scripts kommen. </p>
<p>Fangen wir mit den Grundeinstellungen unseres Mini-Chat-Servers an:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/php
</span><span style="color: #339933;">&lt;</span> ?php
<span style="color: #990000;">set_time_limit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">ob_implicit_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$address</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1.2.3.4&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$port</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1234</span><span style="color: #339933;">;</span></pre></div></div>

<p>Was hier genau passiert ist im Prinzip nichts Weltbewegendes; nichts desto trotz sind diese Zeilen extrem wichtig f&#252;r das korrekte Arbeiten des Socket-Servers:</p>
<p><strong>#!/usr/bin/php</strong></p>
<p>Diese Zeile macht im Prinzip nichts au&#223;er festlegen, dass die <acronym title="Pre-Hypertext Processing">PHP</acronym> Datei in der Shell als normaler Prozess ausgef&#252;hrt werden kann. Bitte passt hier auch euren Pfad zu <acronym title="Pre-Hypertext Processing">PHP</acronym> an.</p>
<p><strong>set_time_limit(0);<br />
ob_implicit_flush();</strong></p>
<p><strong>set_time_limit(0)</strong> sorgt daf&#252;r, dass der Server durchgehend aktiv bleibt, indem es die maximale Laufzeit eines <acronym title="Pre-Hypertext Processing">PHP</acronym> Scriptes ignoriert. <strong>ob_implicit_flush()</strong> hilft uns mit den Ausgaben. Hierdurch k&#246;nnen echos und &#196;hnliches direkt ausgegeben werden, ohne dass das Script fertig geladen sein muss.  <strong>$address</strong> und <strong>$port</strong> ben&#246;tigen wir sp&#228;ter f&#252;r den Verbindungsaufbau zum eigenen Server. Die <acronym title="Internet Protocol">IP</acronym> muss die des eigenen Servers sein und der Port kann ein gew&#252;nschter Port sein, auf dem man auf eingehende Verbindungen warten m&#246;chte.</p>
<p>Kommen wir nun zum n&#228;chsten Teil unseres Socket-Servers. In diesem Abschnitt werden wir die Verbindung aufbauen und auf den gew&#252;nschten Ports auf eingehende Verbindungen warten:
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_create</span><span style="color: #009900;">&#40;</span>AF_INET<span style="color: #339933;">,</span> SOCK_STREAM<span style="color: #339933;">,</span> SOL_TCP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fehler: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #990000;">socket_set_option</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #339933;">,</span> SOL_SOCKET<span style="color: #339933;">,</span>SO_REUSEADDR<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_bind</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #339933;">,</span> <span style="color: #000088;">$address</span><span style="color: #339933;">,</span> <span style="color: #000088;">$port</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fehler: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_listen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fehler: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) > 0) {<br />
echo "Fehler: " . socket_strerror($master) . "\n";<br />
exit();<br />
}<br />
</strong></p>
<p>Hier stellen wir den Master-Socket ein, &#252;ber den alles laufen wird. Detaillierte Informationen zu den Einstellungsm&#246;glichkeiten findet ihr auf <a href="http://de3.php.net/socket_create">php.net</a>.</p>
<p><strong><br />
if (($ret = socket_bind($master, $address, $port)) > 0) {<br />
		echo "Fehler: " . socket_strerror($ret) . "\n";<br />
		exit();<br />
	}<br />
</strong></p>
<p>Hier verbinden wir unseren Master-Socket mit dem oben definierten Port und der <acronym title="Internet Protocol">IP</acronym>. Wie sonst sollte unser Socket wissen von wo die gew&#252;nschten Daten kommen sollen? <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><br />
if (($ret = socket_listen($master, 5)) > 0) {<br />
		echo "Fehler: " . socket_strerror($ret) . "\n";<br />
		exit();<br />
	}<br />
</strong></p>
<p>Jetzt weisen wir unseren Socket an auf eingehende Verbindungen zu warten. Der &#252;bergebene Parameter ‚5’ steht hierbei f&#252;r einen Backlog. Dies erm&#246;glicht bei vielen Anfragen eine interne Schleife zur weiteren Verarbeitung. Mehr hierzu auf <a href="http://de3.php.net/manual/de/function.socket-listen.php">php.net</a></p>
<p>Jetzt kommen wir zum Herzst&#252;ck unseres Socket-Servers: Der Endloschleife. Da dieser Teil sehr umfangreich ist, habe ich mir erlaubt, hier auf <acronym title="Pre-Hypertext Processing">PHP</acronym>-Kommentare zur&#252;ckzugreifen. Falls es von eurer Seite Einw&#228;nde oder Missverst&#228;ndnisse geben sollte, werde ich mich darum bem&#252;hen diesen Teil nochmal abzu&#228;ndern.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Socketvariable</span>
	<span style="color: #000088;">$allsockets</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Abfragen ob die Verbindung unseres Mastersockets steht, falls nicht Server beenden.</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Endlosschleife starten</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Wir speichern die Socketliste in ein neues Array</span>
			<span style="color: #000088;">$changed_sockets</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$allsockets</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Wir holen uns alle Sockets, die ansprechbar sind</span>
			<span style="color: #000088;">$num_changed_sockets</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_select</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$changed_sockets</span><span style="color: #339933;">,</span> <span style="color: #000088;">$write</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">,</span> <span style="color: #000088;">$except</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Wir durchlaufen alle ansprechbaren Sockets</span>
			<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$changed_sockets</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$socket</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// Überprüfung ob es ein neues Socket ist</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$master</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// Wir überprüfen ob es gelingt eine Verbindung zu dem Socket aufzubauen</span>
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$client</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_accept</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$master</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// Falls nicht, geben wir einen Fehler aus</span>
						<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;fehler: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msgsock</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
						<span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// Verbindung wurde erfolgreich aufgebaut, wir fügen Ihn zu unserer Socketliste hinzu</span>
						<span style="color: #990000;">array_push</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span><span style="color: #339933;">,</span> <span style="color: #000088;">$client</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// Da es kein neues Socket ist, durchlaufen wir die bestehenden Sockets</span>
					<span style="color: #666666; font-style: italic;">// als erstes lesen wir das Socket komplett aus</span>
					<span style="color: #000088;">$bytes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_recv</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2048</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #666666; font-style: italic;">// Falls 0 bytes zurückommen und im buffer keine flash policy request vorkommt, ist der client tot</span>
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$bytes</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$buffer</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'&lt;policy-file-request/&gt;'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// Socket in array suchen</span>
						<span style="color: #000088;">$index</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #666666; font-style: italic;">// aus socketliste löschen</span>
						<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$index</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #666666; font-style: italic;">// verbindung zum socket schliessen</span>
						<span style="color: #990000;">socket_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #009900;">&#125;</span> 
					<span style="color: #666666; font-style: italic;">// Wir überprüfen ob es sich um ein policy-file-request handelt, welches von einem Flashsocket immer gesendet wird. Dies ist sehr wichtig für Teil 2 unseres Artikels, da wir indirekt eine Flash-Socketverbindung aufbauen werden.</span>
					<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/policy-file-request/i&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/crossdomain/i&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
					<span style="color: #009900;">&#123;</span>
					  <span style="color: #666666; font-style: italic;">// Flash erwartet eine Antwort als XML. Hier wird die IP/Domain sowie der Port definiert. * sind auch hier als WildCard möglich. Ohne diese Antwort wird Flash keine Verbindung aufbauen. Dies gibt ein Stück Sicherheit. Flash wird bei Erfolg eine normale Socketanfrage stellen, aus diesem Grund wird diese Verbindung nach dem senden des Policy-Files wieder geschlossen.</span>
					  <span style="color: #000088;">$contents</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'&lt; ?xml version=&quot;1.0&quot;?&gt;&lt;cross -domain-policy&gt;&lt;allow -access-from domain=&quot;DOMAIN&quot; to-ports=&quot;PORT&quot; /&gt;&lt;/cross&gt;'</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// xml senden</span>
					  <span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span><span style="color: #000088;">$contents</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// socket suchen</span>
					  <span style="color: #000088;">$index</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// socket aus socketliste löschen</span>
					  <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$index</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">//verbindung zerstören</span>
					  <span style="color: #990000;">socket_shutdown</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// verbindung zum socket schliessen</span>
					  <span style="color: #990000;">socket_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span> 
					<span style="color: #666666; font-style: italic;">// falls eine verbindung via get / post oder http kommt, zerstören</span>
					<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/GET/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/POST/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/HTTP/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
					<span style="color: #009900;">&#123;</span>
					  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/favicon.ico/i&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
					  <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">//ignorieren </span>
					  <span style="color: #009900;">&#125;</span>
					  <span style="color: #b1b100;">else</span>
					  <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// ignorieren</span>
					  <span style="color: #009900;">&#125;</span>
					  <span style="color: #666666; font-style: italic;">// socket suchen</span>
					  <span style="color: #000088;">$index</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// socket aus socketliste löschen</span>
					  <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$index</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// verbindung zerstören</span>
					  <span style="color: #339933;">@</span><span style="color: #990000;">socket_shutdown</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					  <span style="color: #666666; font-style: italic;">// verbindung zum socket schliessen</span>
					  <span style="color: #339933;">@</span><span style="color: #990000;">socket_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// wir speichern die nachricht des sockets zur weiteren verarbeitung</span>
						<span style="color: #000088;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">// Auf valide Daten uberpruefen</span>
					<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// überprüfen ob der socket in der socketliste vorhanden ist, falls nicht fügen wir ihn hinzu, da er neu ist</span>
						<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$socket</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #666666; font-style: italic;">// Nun senden wir das Geschriebene eines Sockets, an alle anderen Sockets</span>
							<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$allsockets</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
								<span style="color: #666666; font-style: italic;">// Nachricht an Socket senden</span>
								<span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
							<span style="color: #009900;">&#125;</span>
						<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
								<span style="color: #666666; font-style: italic;">// socket zur socketliste hinzufügen</span>
								<span style="color: #000088;">$allsockets</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$socket</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$socket</span><span style="color: #339933;">;</span>
								<span style="color: #666666; font-style: italic;">// wir schicken dem user eine kurze verbindungsbestätigung</span>
								<span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$socket</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;&lt;strong&gt;Erfolgreich verbunden&lt;/strong&gt;&lt;br /&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #009900;">&#125;</span> 
							<span style="color: #666666; font-style: italic;">// nachricht löschen um speicher freizugeben</span>
							<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
					<span style="color: #009900;">&#125;</span> 
&nbsp;
&nbsp;
				<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>
			<span style="color: #666666; font-style: italic;">// Dies ist extrem wichtig, damit der Server stabil laufen kann. Dadurch macht der Server bei jedem Durchlauf 10 Mikrosekunden Pause. Das ist nicht spürbar, aber entlastet den Server extrem.</span>
			<span style="color: #990000;">usleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// fehler ausgeben, da server port belegt ist.</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Port ist noch belegt.&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nun haben wir ein funktionsf&#228;higen Chatserver auf <acronym title="Pre-Hypertext Processing">PHP</acronym>-Basis, doch wie gehts weiter? Dieser Chatserver ist extrem simpel und erlaubt lediglich das Kommunizieren mit Leuten die sich auch zur selben Zeit in diesem Chat befinden. Es gibt keine Channels, Usernamen o.&#196;. Das ist nat&#252;rlich relativ mager. Man sollte nun Authentifizierungsmethoden, Channels, Private Messaging und besonders Prozesskontrolle einbauen. Ihr wollt sicherlich nicht, dass euer Server mehrfach l&#228;uft. Hierf&#252;r gibt es einige n&#252;tzliche <acronym title="Pre-Hypertext Processing">PHP</acronym>- und Linux-Funktionen.</p>
<p>Im n&#228;chsten Teil werde ich beschreiben, wie man via JavaScript zu solch einem ChatServer eine Verbindung aufbauen kann, um dar&#252;ber zu chatten.</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=66</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Back</title>
		<link>http://www.uwserver.de/?p=57</link>
		<comments>http://www.uwserver.de/?p=57#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:42:48 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[back]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[chatwidget]]></category>
		<category><![CDATA[crossdomain]]></category>
		<category><![CDATA[cw-internetdienste]]></category>
		<category><![CDATA[cwidget]]></category>
		<category><![CDATA[gdlib]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projekte]]></category>
		<category><![CDATA[sockets]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=57</guid>
		<description><![CDATA[Endlich habe ich mal wieder etwas Zeit zu bloggen und werde mich k&#252;nftig doch mit etwas komplexeren Themen besch&#228;ftigen. Das werden Dinge wie Socketbridges, gdLib2 etc. sein. Wer Interesse hat etwas mehr &#252;ber mich zu erfahren sollte mal auf mein Portfolio schauen oder sich mein aktuelles Mini-Projekt ansehen. Das CWidget ist ein crossdomain Chat, welcher [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich habe ich mal wieder etwas Zeit zu bloggen und werde mich k&#252;nftig doch mit etwas komplexeren Themen besch&#228;ftigen. Das werden Dinge wie Socketbridges, gdLib2 etc. sein. Wer Interesse hat etwas mehr &#252;ber mich zu erfahren sollte mal auf mein <a title="Portfolio" href="http://www.cw-internetdienste.de" target="_blank">Portfolio</a> schauen oder sich mein aktuelles Mini-Projekt ansehen. Das <a title="CWidet" href="http://www.cwidget.de" target="_blank">CWidget</a> ist ein crossdomain Chat, welcher auf jeder Domain via Favoritenleiste gestartet werden kann. Jede Domain stellt somit eine Art Channel dar. Das ganze benutzt keinerlei <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>-Technologien, sondern baut komplett auf Socketverbindungen auf, wodurch die Antwortzeiten wirklich extrem gut sind. Das w&#228;re mit <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> so nicht zu schaffen. Schaut es euch einfach mal an. Falls Ihr eine eigene Webseite habt, gibt es im Accountmen&#252; auch eine M&#246;glichkeit eigene Domains zu registrieren und dort das CWidget ein wenig anzupassen und automatisch zu starten.</p>
<p>Mit freundlichen Gr&#252;&#223;en,<br />
Chris</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=57</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CW Pager &#8211; Eine PHP Pagination Klasse</title>
		<link>http://www.uwserver.de/?p=22</link>
		<comments>http://www.uwserver.de/?p=22#comments</comments>
		<pubDate>Tue, 06 May 2008 12:50:53 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Blätterfunktion]]></category>
		<category><![CDATA[CW Pager]]></category>
		<category><![CDATA[CWPager]]></category>
		<category><![CDATA[Digg]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Pagination]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=22</guid>
		<description><![CDATA[F&#252;r mein aktuelles Projekt, ben&#246;tige ich st&#228;ndig die M&#246;glichkeit, verschiedene Arten von Paginations einzubauen, aus diesem Grund ist diese Klasse entstanden. Sie ist in einer noch recht fr&#252;hen Version, aber erlaub es schon jetzt mit wenigen Schritten gro&#223;e Pagination-Systeme zu bauen und individuell zu gestalten
Einfach hier klicken um zur Seite zu gelangen
   Feedback [...]]]></description>
			<content:encoded><![CDATA[<p>F&#252;r mein aktuelles Projekt, ben&#246;tige ich st&#228;ndig die M&#246;glichkeit, verschiedene Arten von Paginations einzubauen, aus diesem Grund ist diese Klasse entstanden. Sie ist in einer noch recht fr&#252;hen Version, aber erlaub es schon jetzt mit wenigen Schritten gro&#223;e Pagination-Systeme zu bauen und individuell zu gestalten</p>
<p><a class="aligncenter" title="CW Pager" href="http://www.cw-internetdienste.de/dev/pager" target="_blank">Einfach hier klicken um zur Seite zu gelangen</a></p>
<p><a class="aligncenter" title="CW Pager" href="http://www.cw-internetdienste.de/dev/pager" target="_blank"></a> <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Feedback ist gerne gesehen, besonders wenn es darum geht, welche Funktionen noch eingebaut werden sollen.</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=22</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Iconsammlung die 2.</title>
		<link>http://www.uwserver.de/?p=21</link>
		<comments>http://www.uwserver.de/?p=21#comments</comments>
		<pubDate>Wed, 30 Apr 2008 08:46:28 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[Grafiken]]></category>
		<category><![CDATA[Icons]]></category>
		<category><![CDATA[kostenlos]]></category>
		<category><![CDATA[Sammlungen]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=21</guid>
		<description><![CDATA[So ich dachte ich mache mal wieder eine kleine Liste mit allen frei zug&#228;nglichen Icon-Sammlungen die ich kenne. Kann sein das auch welche von meinem letzten Post dabei sind, aber ist ja unwichtig.

DrWeb#1
DrWeb#2
DrWeb#3
DrWeb#4
Iconspedia
Webappers
CrazyLeaf Liste
Deziner Folio
Aqua Gloss Icons
Iconfactory
FreeIconsDownload
Freebies Round-Up: Icons, Buttons and Templates
20 Free And Fresh Icon Sets
Icons For Your Desktop and Icons For Your Web [...]]]></description>
			<content:encoded><![CDATA[<p>So ich dachte ich mache mal wieder eine kleine Liste mit allen frei zug&#228;nglichen Icon-Sammlungen die ich kenne. Kann sein das auch welche von meinem letzten Post dabei sind, aber ist ja unwichtig.</p>
<ul>
<li><a href="http://www.drweb.de/weblog/weblog/?p=541" target="_blank">DrWeb#1</a></li>
<li><a href="http://www.drweb.de/webgrafik/gratis-icons-buttons.shtml" target="_blank">DrWeb#2</a></li>
<li><a href="http://www.drweb.de/webgrafik/free-icons.shtml" target="_blank">DrWeb#3</a></li>
<li><a href="http://www.drweb.de/webgrafik/free-icons-teil4.shtml" target="_blank">DrWeb#4</a></li>
<li><a href="http://www.iconspedia.com/" target="_blank">Iconspedia</a></li>
<li><a href="http://www.webappers.com/2008/02/12/webappers-released-free-web-application-icons-set/" target="_blank">Webappers</a></li>
<li><a href="http://www.crazyleafdesign.com/blog/sunday-design-resource-issue-3-500-icons-every-designer-needs/" target="_blank">CrazyLeaf Liste</a></li>
<li><a href="http://www.dezinerfolio.com/2007/09/25/top-50-supercool-free-icon-sets/" target="_blank">Deziner Folio</a></li>
<li><a href="http://www.dezinerfolio.com/2007/07/17/aqua-gloss-icons-the-psd/" target="_blank">Aqua Gloss Icons</a></li>
<li><a href="http://iconfactory.com/freeware/preview/stkr1" target="_blank">Iconfactory</a></li>
<li><a href="http://www.freeiconsdownload.com/" target="_blank">FreeIconsDownload</a></li>
<li><a href="http://www.smashingmagazine.com/2007/05/24/freebies-round-up-icons-buttons-and-templates/" target="_blank">Freebies Round-Up: Icons, Buttons and Templates</a></li>
<li><a href="http://www.smashingmagazine.com/2007/08/25/20-free-and-fresh-icon-sets/" target="_blank">20 Free And Fresh Icon Sets</a></li>
<li><a href="http://www.smashingmagazine.com/2007/11/29/icons-for-your-desktop-and-icons-for-your-web-designs/" target="_blank">Icons For Your Desktop and Icons For Your Web Designs</a></li>
<li><a href="http://www.smashingmagazine.com/2008/03/06/35-really-incredible-free-icon-sets/" target="_blank">35 (Really) Incredible Free Icon Sets</a></li>
<li><a href="http://www.smashingmagazine.com/2008/05/21/40-professional-icon-sets-for-free-download/" target="_blank">40 professional Icons sets for free download</a></li>
</ul>
<p>So das wars dann erstmal. <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Werde diese Liste von Zeit zu Zeit erweitern.</p>
<p>Danke f&#252;rs lesen!</p>
<p>Chris</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CWComet *update*</title>
		<link>http://www.uwserver.de/?p=19</link>
		<comments>http://www.uwserver.de/?p=19#comments</comments>
		<pubDate>Thu, 24 Apr 2008 16:18:19 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[bibliotheken]]></category>
		<category><![CDATA[COMET]]></category>
		<category><![CDATA[CWComet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=19</guid>
		<description><![CDATA[Es ist mal wieder soweit, ich habe eine neus Projekt. Es wird definitiv kein Projekt mit gro&#223;er Priorit&#228;t sein, sondern eher eines das von mir weiterwentickelt wird, sobald ich es ben&#246;tige. Es ist eine JavaScript Klasse die auf Prototype aufbaut. Mit Ihr wird man in der Lage sein, COMET sehr einfach nutzen zu k&#246;nnen. Aktuell [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist mal wieder soweit, ich habe eine neus Projekt. Es wird definitiv kein Projekt mit gro&#223;er Priorit&#228;t sein, sondern eher eines das von mir weiterwentickelt wird, sobald ich es ben&#246;tige. Es ist eine JavaScript Klasse die auf Prototype aufbaut. Mit Ihr wird man in der Lage sein, COMET sehr einfach nutzen zu k&#246;nnen. Aktuell unterst&#252;tzt die Klasse lediglich das abfragen einer Datei und auch nur die XHR Long-Polling Methode. Da diese durchweg Crossbrowser-Kompatibel ist. Die Klasse baut sofort eine Verbindung auf und gibt die Daten in einen Div aus.</p>
<p><strong>K&#252;nftige Features:</strong></p>
<ul>
<li>Daten sollen auch upgedatet werden k&#246;nnen (Aktuell muss es einfach via <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> au&#223;erhalb der Klasse gemacht werden)</li>
<li>Mehrere Verbindungsmethoden, nicht nur XHR Long-Polling</li>
<li>Mehere Dateien abfragen</li>
<li>divere Hilfsfunktionen</li>
</ul>
<p>Wie man sieht ist noch einiges zu tun und wie man auch sieht, bin ich noch sehr unschl&#252;ssig was ich alles einbauen soll. Also wenn jemand Ideen hat. Nur her damit. Ich garantiere f&#252;r nichts, aber die ein oder andere Idee wird es sicherlich schaffen. <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Die Klasse in Aktion: <a title="CWComet Test" href="http://www.cw-internetdienste.de/dev/comet/4/">http://www.cw-internetdienste.de/dev/comet/4/</a></p>
<p>Ihr ben&#246;tigt <a title="Prototype JavaScript Bibliothek" href="http://www.prototypejs.org" target="_blank">Prototype</a>!</p>
<p>Die Klasse: <a href="http://www.uwserver.de/wp-content/uploads/2008/04/cwcomet.zip">CWComet v0.1</a></p>
<p>Viel Spa&#223;!</p>
<p>*UPDATE*</p>
<p>Wie mir gerade berichtet wurde, funktioniert es nicht beim IE7 und Opera. Ich werde der Ursache in den n&#228;chsten Tagen auf den Grund gehen</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=19</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frischer Wind</title>
		<link>http://www.uwserver.de/?p=18</link>
		<comments>http://www.uwserver.de/?p=18#comments</comments>
		<pubDate>Wed, 23 Apr 2008 18:30:24 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=18</guid>
		<description><![CDATA[So ich habe mir gedacht, ich update mal meine Wordpress-Version und lege mir mal ein neues Layout zu, sowie einige neue Widgets und Plugins. Hoffe es gef&#228;llt euch alles soweit!  ]]></description>
			<content:encoded><![CDATA[<p>So ich habe mir gedacht, ich update mal meine Wordpress-Version und lege mir mal ein neues Layout zu, sowie einige neue Widgets und Plugins. Hoffe es gef&#228;llt euch alles soweit! <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=18</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spambots via htaccess ausschlie&#223;en</title>
		<link>http://www.uwserver.de/?p=17</link>
		<comments>http://www.uwserver.de/?p=17#comments</comments>
		<pubDate>Fri, 11 Apr 2008 08:17:40 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=17</guid>
		<description><![CDATA[Wem geht es nicht so&#8230; man checkt seine Mails&#8230; freut sich &#252;ber zahlreiche Emails und dann&#8230; eine Spam-Werbung nach der anderen. Das nervt wie sau. Aber es gibt ganz einfache Mittel um wenigstens die meisten von seinen eigenen Seiten auszuschlie&#223;en und das sogar sehr einfach. Man nehme seine htaccess und f&#252;gt den folgenden Code ein. [...]]]></description>
			<content:encoded><![CDATA[<p>Wem geht es nicht so&#8230; man checkt seine Mails&#8230; freut sich &#252;ber zahlreiche Emails und dann&#8230; eine Spam-Werbung nach der anderen. Das nervt wie sau. Aber es gibt ganz einfache Mittel um wenigstens die meisten von seinen eigenen Seiten auszuschlie&#223;en und das sogar sehr einfach. Man nehme seine htaccess und f&#252;gt den folgenden Code ein. Dieser checkt die UserAgents und filtert nach den Bekanntesten. Es ist zu empfehlen diese Liste zu erweitern. Im Internet gibt es zahlreiche Datenbanken mit bekannten Spam-Servern.</p>
<pre>RewriteCond %{HTTP_USER_AGENT} ^.*Whacker.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FileHound.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*TurnitinBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*JoBo.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*adressendeutschland.*$
RewriteRule ^.* - [F]</pre>
<p>Hoffe das hilft euch ein wenig weiter. Es erspart einem auf jedenfall viel Arbeit und ist sehr effektiv.</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript und CSS schneller laden mit htaccess gzip</title>
		<link>http://www.uwserver.de/?p=16</link>
		<comments>http://www.uwserver.de/?p=16#comments</comments>
		<pubDate>Thu, 10 Apr 2008 11:41:02 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=16</guid>
		<description><![CDATA[Wer kennt es nicht&#8230; man hat Protoype&#8230; Scriptaculous und noch einige andere Bibliotheken&#8230; sehr schnell hat man mal 200kb die st&#228;ndig geladen werden. Das dies ein ganzer Haufen ist f&#252;r so manch eine Leitung, ist jedem klar.
Kleines Beispiel:
Komplettes Prototype ohne Kompression: ca. 9 Sekunden (124kb)
Komplettes Prototype mit Kompression: ca. 3 Sekunden (32kb)
Das ist definitiv ein [...]]]></description>
			<content:encoded><![CDATA[<p>Wer kennt es nicht&#8230; man hat Protoype&#8230; Scriptaculous und noch einige andere Bibliotheken&#8230; sehr schnell hat man mal 200kb die st&#228;ndig geladen werden. Das dies ein ganzer Haufen ist f&#252;r so manch eine Leitung, ist jedem klar.</p>
<p>Kleines Beispiel:</p>
<p><strong>Komplettes Prototype ohne Kompression: ca. 9 Sekunden (124kb)<br />
Komplettes Prototype mit Kompression: ca. 3 Sekunden (32kb)</strong></p>
<p>Das ist definitiv ein immenser Vorteil, die komprimierte Version wird nur genommen, sofern der Browser gzip-Dateien unterst&#252;tzt, somit kann es auch hier nicht zu Problemen f&#252;hren. Einzigster Nachteil: Browser ohne Support, haben nach wie vor lange Ladezeiten, was Schade ist.</p>
<p>Der .htaccess Code:</p>
<pre>RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:Accept-Encoding} .*gzip.*
RewriteRule ^js/(.*)\.js$ /scripts/$1.js.gz [L]
RewriteRule ^css/(.*)\.css$ /css/$1.css.gz [L]
AddEncoding x-gzip text.gz</pre>
<p>Wichtig ist das man stets 2 Versionen von allen Dateien machen. Einmal die normale .js / .css und dann einmal .js.gz / .css.gz. Via Script l&#228;sst sich das auch ganz einfach l&#246;sen. Wer sich keine gro&#223;e Arbeit machen will, diese zu komprimieren. Einfach diese <acronym title="Pre-Hypertext Processing">PHP</acronym>-Datei in den Ordner mit den JavaScripts legen. (F&#252;r <acronym title="Cascading Style Sheets">CSS</acronym> entsprechend anpassen).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
&nbsp;
<span style="color: #000088;">$jsFiles</span> <span style="color: #339933;">=</span> <span style="color: #990000;">glob</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$jsFiles</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$jsFile</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000088;">$basename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$jsFile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$gzname</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$basename</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.gz'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gzname</span><span style="color: #339933;">,</span> <span style="color: #990000;">gzencode</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$basename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></div></div>

<p>Hoffe das hilft dem einen oder anderen, ein wenig Bandbreite zu sparen und den Usern ein wenig mehr aus den Ladezeiten herauszuholen.</p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Simple hack-freie  transparente Grafiken</title>
		<link>http://www.uwserver.de/?p=15</link>
		<comments>http://www.uwserver.de/?p=15#comments</comments>
		<pubDate>Sat, 05 Apr 2008 07:32:03 +0000</pubDate>
		<dc:creator>Christian Weber</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.uwserver.de/?p=15</guid>
		<description><![CDATA[Wer kennt nicht das Problem, st&#228;ndig irgendwelche Hacks einzubauen, nur damit der IE auch transparente Grafiken anzeigt? Eine nette Alternative ist eine stinknormale w3c konforme CSS  L&#246;sung. Ein Beispiel:

.box .left &#123;
background: url&#40;'xyz.png'&#41; !important; /* FF etc. png File */
background: url&#40;'xyz.gif'&#41;; /* IE Only */
&#125;

Ist nichts gro&#223;artiges, ich wei&#223;, aber es funktioniert bei mir ohne [...]]]></description>
			<content:encoded><![CDATA[<p>Wer kennt nicht das Problem, st&#228;ndig irgendwelche Hacks einzubauen, nur damit der <acronym title="Internet Explorer">IE</acronym> auch transparente Grafiken anzeigt? Eine nette Alternative ist eine stinknormale w3c konforme <acronym title="Cascading Style Sheets">CSS</acronym>  L&#246;sung. Ein Beispiel:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.box</span> <span style="color: #6666ff;">.left</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'xyz.png'</span><span style="color: #00AA00;">&#41;</span> !important<span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* FF etc. png File */</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'xyz.gif'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* IE Only */</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Ist nichts gro&#223;artiges, ich wei&#223;, aber es funktioniert bei mir ohne Probleme und es ist valides <acronym title="Cascading Style Sheets">CSS</acronym>. Vielleicht kennt es ja noch nicht jeder. <img src='http://www.uwserver.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://www.uwserver.de/?feed=rss2&amp;p=15</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
