<?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>D-Sites &#187; multiple</title>
	<atom:link href="http://www.d-sites.com/tag/multiple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.d-sites.com</link>
	<description>Web, PHP, Python, …</description>
	<lastBuildDate>Tue, 03 Jan 2012 08:39:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>socket_stream_select: Attendre un flux (stream) et un socket en même temps</title>
		<link>http://www.d-sites.com/2010/02/27/socket_stream_select-attendre-un-flux-stream-et-un-socket-en-meme-temps/</link>
		<comments>http://www.d-sites.com/2010/02/27/socket_stream_select-attendre-un-flux-stream-et-un-socket-en-meme-temps/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 15:36:04 +0000</pubDate>
		<dc:creator>Samuel ROZE</dc:creator>
				<category><![CDATA[Adm. Système]]></category>
		<category><![CDATA[D-Sites]]></category>
		<category><![CDATA[Linux/Unix]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[multiple]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[simultaneous]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[wait]]></category>

		<guid isPermaLink="false">http://www.d-sites.com/?p=655</guid>
		<description><![CDATA[Avec PHP, on peut interagir avec l&#8217;extérieur (et l&#8217;intérieur) du serveur sur lequel est exécuté le PHP à l&#8217;aide de flux et de sockets. Pour PHP, les flux &#8211; ou streams &#8211; et les sockets sont différents, alors qu&#8217;au niveau &#8230; <a href="http://www.d-sites.com/2010/02/27/socket_stream_select-attendre-un-flux-stream-et-un-socket-en-meme-temps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Avec PHP, on peut interagir avec l&#8217;extérieur (et l&#8217;intérieur) du serveur sur lequel est exécuté le PHP à l&#8217;aide de flux et de sockets. Pour PHP, les flux &#8211; ou <em>streams</em> &#8211; et les sockets sont différents, alors qu&#8217;au niveau système, ce sont en réalité tous les deux des sockets (différents des sockets tels que l&#8217;entend PHP).</p>
<p>L&#8217;on travaille sur les deux en utilisant des fonctions toutes distinctes:</p>
<ul>
<li>Pour les flux, se sont <a href="http://fr.php.net/manual/fr/ref.stream.php">les fonctions <code>stream_*</code></a></li>
<li>Pour les sockets, se sont <a href="http://fr.php.net/manual/fr/ref.sockets.php">les fonctions <code>socket_*</code></a></li>
</ul>
<p>Parmi celles-ci, il y a deux fonctions extrêmement utiles: <code>stream_select</code> et <code>socket_select</code>. Elles permettent d&#8217;attendre de nouvelles données respectivement depuis un flux et un socket.</p>
<p>Vous pouvez par exemple attendre deux flux de données en même temps avec <code>stream_select</code>. Si l&#8217;un des deux a de nouvelles informations, la fonction retourne un entier décrivant le nombre de flux qui ont eu de nouvelles notifications. Vous pouvez aussi ajouter un <em>timeout</em>, etc&#8230; De la même manière, vous pouvez attendre un ou plusieurs sockets avec <code>socket_select</code>.</p>
<p>Seulement, si vous travaillez à la fois avec des flux et des sockets&#8230; Comment faire?</p>
<ol>
<li>Vous pouvez très bien mettre des <em>timeout</em> à quelques dizaines de millisecondes, regarder pendant <code>x</code> ms le flux, <code>x</code> ms le socket, puis on recommence&#8230; C&#8217;est une solution comme une autre mais très peu propre, et qui ne sera jamais &#8220;instantanée&#8221;.</li>
<li>Vous pouvez utiliser un système, auquel vous vous connecterez en socket, qui écoutera un flux et dès que le flux recevra des données, il vous l&#8217;enverra par le socket. Ainsi, vous aurez que des sockets, vous pouvez donc utiliser <code>socket_select</code>.</li>
<li>Mais, pourquoi ne pas créer une fonction <code>socket_stream_select</code>, ou <code>stream_socket_select</code>, comme vous voulez, dans le coeur de PHP, qui transformera les flux et les sockets PHP en sockets systèmes pour les écouter avec la fonction C <code>select</code> ?</li>
</ol>
<p><span id="more-655"></span></p>
<h2>Une fonction <code>socket_stream_select</code></h2>
<p>Elle aurait très bien pu s&#8217;appeller <code>stream_socket_select</code> mais les fonctions <code>socket_*</code> étant présentes uniquement lorsque PHP est compilé avec <code>--enable-socket</code>, et que les flux sont toujours présents, a fait que mon choix s&#8217;est porté vers l&#8217;ajout d&#8217;une fonction à l&#8217;extension &#8220;socket&#8221; de PHP.</p>
<p>La fonction socket_stream_select ressemble à <a href="http://fr.php.net/socket_select">socket_select</a> et <a href="http://fr.php.net/stream_select">stream_select</a>, mais elle prend 8 paramètres, qui sont décrit après son prototype que voilà:</p>
<blockquote><p>int <strong>socket_stream_select</strong> ( array <em>&amp;$read_streams</em>, array <em>&amp;$read_sockets</em>, array <em>&amp;$write_streams</em>, array <em>&amp;$write_sockets</em>, array <em>&amp;$except_streams</em>, array <em>&amp;$except_sockets</em>, int <em>$tv_sec</em> [, int <em>$tv_usec</em>])</p></blockquote>
<ul>
<li><strong>$read_streams</strong><br />
Flux surveillés pour la lecture</li>
<li><strong>$read_sockets</strong><br />
Sockets surveillés pour la lecture</li>
<li><strong>$write_streams</strong><br />
Flux surveillés pour l&#8217;écriture</li>
<li><strong>$write_sockets</strong><br />
Sockets surveillés pour l&#8217;écriture</li>
<li><strong>$except_streams</strong><br />
Flux surveillés pour leurs exceptions</li>
<li><strong>$except_sockets</strong><br />
Sockets surveillés pour leurs exceptions</li>
<li>Les paramètres <strong>$tv_sec</strong> (en secondes) et <strong>$tv_usec</strong> (en millisecondes) forment le paramètre <em>timeout</em> (durée de vie). Le timeout est la durée maximale de temps avant que socket_stream_select() ne se termine. <strong>$tv_sec</strong> peut être zéro, ce qui fera que socket_stream_select() retournera immédiatement. C&#8217;est très pratique pour faire du polling (sondage). Si <strong>$tv_sec</strong> est NULL  (pas de timeout), socket_stream_select() peut se bloquer indéfiniment.</li>
</ul>
<h2>Installation de la fonction socket_stream_select</h2>
<p>Pour pouvoir bénéficier de la fonction socket_stream_select, vous devez utiliser votre propre version de PHP, que vous aurez préalablement patchée avec le patch pour socket_stream_select, puis compiler avec l&#8217;option &#8211;enable-socket.</p>
<p>Le patch se trouve à cette adresse:</p>
<ul>
<li><a href="http://www.d-sites.com/wp-content/uploads/2009/12/socket_stream_select.patch">http://www.d-sites.com/wp-content/uploads/2009/12/socket_stream_select.patch</a></li>
</ul>
<p>Dans le dossier des sources de PHP 5.3, il vous suffit d&#8217;exécuter ces deux commandes afin de créer cette fonction socket_stream_select dans le coeur de PHP:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">wget http://www.d-sites.com/wp-content/uploads/2009/12/socket_stream_select.patch -O socket_stream_select.patch
patch -p0 &lt; socket_stream_select.patch</pre></div></div>

<p>Bonne continuation. <img src='http://www.d-sites.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.d-sites.com/2010/02/27/socket_stream_select-attendre-un-flux-stream-et-un-socket-en-meme-temps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Plusieurs fancybox simultanément</title>
		<link>http://www.d-sites.com/2010/01/29/plusieurs-fancybox-simultanement/</link>
		<comments>http://www.d-sites.com/2010/01/29/plusieurs-fancybox-simultanement/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:24:43 +0000</pubDate>
		<dc:creator>Samuel ROZE</dc:creator>
				<category><![CDATA[Affichage]]></category>
		<category><![CDATA[Nouveautées]]></category>
		<category><![CDATA[fancybox]]></category>
		<category><![CDATA[multiple]]></category>
		<category><![CDATA[simultanée]]></category>
		<category><![CDATA[simultaneous]]></category>

		<guid isPermaLink="false">http://www.d-sites.com/?p=737</guid>
		<description><![CDATA[Si vous ne connaissez pas, FancyBox est une petite librairie jQuery permettant de mettre en place de manière très simple de petites nouvelles petites sur-fenêtres, ou popup au sein de votre page Web. Le problème de FancyBox, en tous les &#8230; <a href="http://www.d-sites.com/2010/01/29/plusieurs-fancybox-simultanement/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si vous ne connaissez pas, <a href="http://www.fancybox.net/">FancyBox</a> est une petite librairie jQuery permettant de mettre en place de manière très simple de petites nouvelles petites sur-fenêtres, ou popup au sein de votre page Web. Le problème de FancyBox, en tous les cas pour la version actuelle, la 1.2.6, c&#8217;est qu&#8217;il est impossible de créer deux popups en même temps, par exemple on ouvre une popup &#8220;inline&#8221;, puis dans celle-ci on a par exemple une nouvelle popup, qui affiche des photos, hé bien c&#8217;est impossible&#8230;</p>
<p>Pour ça, j&#8217;ai donc développé une version &#8220;multiple&#8221; de FancyBox 1.2.6, dont le fichier JavaScript (et CSS) se nomment <code>jquery.fancybox-1.2.6.multiple.js</code> et <code>.css</code>. Vous pouvez les télécharger à ces adresses:</p>
<ul>
<li><a href="http://www.d-sites.com/wp-content/uploads/2010/01/jquery.fancybox-1.2.6.multiple.js">http://www.d-sites.com/wp-content/uploads/2010/01/jquery.fancybox-1.2.6.multiple.js</a></li>
<li><a href="http://www.d-sites.com/wp-content/uploads/2010/01/jquery.fancybox-1.2.6.multiple.css">http://www.d-sites.com/wp-content/uploads/2010/01/jquery.fancybox-1.2.6.multiple.css</a></li>
</ul>
<p>L&#8217;utilisation est quasi identique, sauf qu&#8217;un nouvel argument est possible lors de l&#8217;appel de la méthode fancybox sur un élément. Le deuxième argument attendu est le parent de la fancybox, ce qui permet ainsi de les différencier (un parent par fancybox), qui est par défaut <code>$('body')</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a#i2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fancybox</span><span style="color: #009900;">&#40;</span>
	<span style="color: #009900;">&#123;</span>
		hideOnContentClick<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div#inline'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>N&#8217;hésitez pas à me faire des retours. <img src='http://www.d-sites.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.d-sites.com/2010/01/29/plusieurs-fancybox-simultanement/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching 1/17 queries in 0.030 seconds using apc
Object Caching 332/368 objects using apc

Served from: d-sites.com @ 2012-02-04 19:41:27 -->
