<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>server-push &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/server-push/</link>
	<description>Feed of posts on WordPress.com tagged "server-push"</description>
	<pubDate>Wed, 10 Feb 2010 13:54:47 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Remote event listening for GWT - gwteventservice]]></title>
<link>http://vinaytech.wordpress.com/2009/01/12/remote-event-listening-for-gwt-gwteventservice/</link>
<pubDate>Mon, 12 Jan 2009 10:48:55 +0000</pubDate>
<dc:creator>Vinay</dc:creator>
<guid>http://vinaytech.wordpress.com/2009/01/12/remote-event-listening-for-gwt-gwteventservice/</guid>
<description><![CDATA[GWTEventService is an event-based client-server communication framework. It uses GWT-RPC and the Com]]></description>
<content:encoded><![CDATA[GWTEventService is an event-based client-server communication framework. It uses GWT-RPC and the Com]]></content:encoded>
</item>
<item>
<title><![CDATA[Why Blaze DS?]]></title>
<link>http://anilchannappa.org/2008/11/12/why-blaze-ds/</link>
<pubDate>Wed, 12 Nov 2008 17:58:34 +0000</pubDate>
<dc:creator>Anil</dc:creator>
<guid>http://anilchannappa.org/2008/11/12/why-blaze-ds/</guid>
<description><![CDATA[2 reasons Reason 1: Remoting = Faster performance Flex enables applications to communicate with the ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>2 reasons</strong></p>
<p><strong>Reason 1: Remoting = Faster performance</strong></p>
<p>Flex enables applications to communicate with the server over AMF, a faster binary alternative to String encoding. If your business logic is available in Java,  Blaze DS offers <strong>Remoting </strong>that enables Flex applications to direct communicate with your business logic over AMF.</p>
<p><em><strong>Note</strong>: The fundamental difference between flex applications and web application is that you don&#8217;t generate your presentation logic on the server. The communication between the Flex client and your server (Blaze DS) is primarily data. Hence your application performs much faster than a typical web application.<br />
</em></p>
<p><strong>Reason 2: Messaging = Live Flex Applications<br />
</strong></p>
<p>The request response nature of HTTP makes it very challenging to create web applications that are not static with out any user interaction. Remember when you watching NFL (any sport scores) on the Internet, your screen updates every 2 minutes to get the latest scores. It is annoying and inefficient. Blaze DS offers a messaging infrastructure that enable you to build server applications that can push messages to Flex Application. Flex applications using Blaze DS don&#8217;t have to blink anymore.</p>
<p>To top it, Blaze DS is Open source and Free to use in production <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Comet - Server Push com XHR Multipart]]></title>
<link>http://garotosopa.wordpress.com/2008/09/21/comet-server-push-xhr-multipart/</link>
<pubDate>Sun, 21 Sep 2008 20:00:06 +0000</pubDate>
<dc:creator>garotosopa</dc:creator>
<guid>http://garotosopa.wordpress.com/2008/09/21/comet-server-push-xhr-multipart/</guid>
<description><![CDATA[Em 1995 a Netscape[1] teve a idéia de utilizar respostas HTTP multipart como implementação de server]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Em 1995 a Netscape<sup><a href="#referencia-netscape">[1]</a></sup> teve a idéia de utilizar respostas HTTP multipart como implementação de <em>server push</em>, onde o servidor envia múltiplas respostas a uma mesma requisição. Treze anos depois eu me dei conta que esse streaming de dados realmente torna aplicações web muito mais dinâmicas, caracterizando o que alguns chamam de Comet<sup><a href="#referencia-comet">[2]</a></sup>.</p>
<p>Outras opções para aplicações dinâmicas incluem deixar um iframe carregando tags Javascript eternamente; abrir uma conexão XMLHttpRequest a cada intervalo de tempo; ou implementar Long Polling, onde o servidor segura a conexão enquanto não houver conteúdo novo e, quando a resposta for enviada, um novo XMLHttpRequest é criado pelo navegador.</p>
<p>O grande conceito de <em>server push</em> é o servidor poder se comunicar com o cliente em tempo real sem que o navegador tenha que ficar pedindo atualizações. Nenhuma das soluções acima consegue atingir o estado da arte neste ponto.</p>
<p><!--more--></p>
<h3>Multipart</h3>
<p>O conceito de multipart é o mesmo que utilizamos em e-mails MIME<sup><a href="#referencia-mime">[3]</a></sup>, como quando enviamos e-mails com anexo. Um cabeçalho deve ser enviado definindo que o tipo da resposta é com várias partes separadas por um delimitador (<em>boundary</em>):</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">Content-type: multipart/mixed; boundary="<strong>delimitador</strong>"</code></p>
<p>E então cada uma das partes fica entre este delimitador, acompanhada do seu próprio content-type:</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">--delimitador<br />
Content-type: text/plain<br />
&#160;<br />
Primeira mensagem<br />
<code>-</code><code>-</code>delimitador<br />
Content-type: text/plain<br />
&#160;<br />
Segunda mensagem<br />
<code>-</code><code>-</code>delimitador<br />
Content-type: text/plain<br />
&#160;<br />
Mensagem final<br />
<code>-</code><code>-</code>delimitador<code>-</code><code>-</code></code></p>
<p>O delimitador é iniciado por dois hífens e o último deles também termina com dois hífens, indicando o final do conteúdo. Sem este último delimitador, o cliente vai ficar esperando por outras partes até que os dois hífens depois do delimitador indiquem o final do conteúdo.</p>
<p>&#160;</p>
<h3>Javascript</h3>
<p>A diferença no Javascript para receber respostas multipart é apenas um parâmetro extra no objeto XMLHttpRequest:</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">var xhr = new XMLHttpRequest();<br />
<strong>xhr.multipart = true;</strong><br />
xhr.open('GET', 'script-multipart.php', true);<br />
xhr.onreadystatechange = function(){<br />
&#160;&#160;&#160;&#160;if( this.readyState == 4 &#38;&#38; this.status == 200 ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.body.innerHTML = this.responseText;<br />
&#160;&#160;&#160;&#160;}<br />
};<br />
window.onload = function(){ xhr.send(null); }</code></p>
<p>Quando configurado para respostas multipart, a requisição é dada como concluída pra cada uma das partes recebidas. A propriedade <em>readyState</em> recebe o valor 4 (Loaded) e o evento <em>onReadyStateChange</em> é disparado. A parte carregada vai estar disponível em <em>responseText</em>, da mesma forma que em requisições normais.</p>
<p>Se o XMLHttpRequest estiver configurado para multipart, é importante que o servidor responda como multipart e vice-versa.</p>
<p>&#160;</p>
<h3>Servidor</h3>
<p>No servidor é necessário enviar o cabeçalho HTTP para definir o tipo de resposta como multipart. Mas diferente das mensagens MIME, o tipo de conteúdo multipart no HTTP é <strong>multipart/x-mixed-replace</strong>. A partir daí basta respeitarmos a saída com os delimitadores.</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">&#60;?php<br />
set_time_limit(0);<br />
&#160;&#160;&#160;&#160;<br />
header('Content-type: multipart/x-mixed-replace;boundary="delimitador"');<br />
echo "<code>-</code><code>-</code>delimitador\n";<br />
&#160;&#160;&#160;&#160;<br />
while( true ){<br />
&#160;&#160;&#160;&#160;echo "Content-type: text/plain\n\n";<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;echo date("d/m/Y H:i:s"), "\n";<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;echo "<code>-</code><code>-</code>delimitador\n";<br />
&#160;&#160;&#160;&#160;flush();<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;sleep(1);<br />
}</code></p>
<p>Ao acessar o script acima pelo navegador já é possível ver as partes sendo trocadas na tela (daí o tipo <em>replace</em>).</p>
<p>O <em>time limit</em> foi desabilitado para que o script fique em execução enquanto o cliente estiver conectado. Sem ele, pela configuração normal do PHP, o script daria timeout em 30 segundos.</p>
<p>O content-type principal (multipart/x-mixed-replace) foi enviado com a função header por fazer parte dos <em>response headers</em> da requisição HTTP. Já os content-type&#8217;s de cada mensagem são enviados como saída normal, pois fazem parte do conteúdo como um todo, e não dos cabeçalhos HTTP. Para diferenciar o cabeçalho do conteúdo em si, ele deve ser terminado com uma linha em branco (\n\n). Caso não seja necessário o envio de nenhum cabeçalho, é importante ter uma linha vazia entre o delimitador e o conteúdo.</p>
<p>Assim que cada parte é montada, é preciso ter certeza que ela será enviada ao cliente ao invés de ficar no buffer do PHP. Dependendo do seu ambiente, pode ser necessário o uso da função ob_flush() em conjunto com flush()<sup><a href="#referencia-flush">[4]</a></sup>.</p>
<p>&#160;</p>
<h3>Problemas</h3>
<h4>Somente Gecko</h4>
<p>Até o momento, a interpretação de multipart pelo XMLHttpRequest está disponível apenas em navegadores que utilizam a engine Gecko, como o Firefox, por exemplo. Para manter o código compatível com outros browsers é possível checar o suporte com <strong>if( xhr.multipart != null )</strong> e implementar outra solução como contingência. Uma boa saída é utilizar multipart nos navegadores que o suportarem e long polling nos demais.</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">if( window.XMLHttpRequest ){<br />
&#160;&#160;&#160;&#160;var xhr = new XMLHttpRequest();<br />
}else if( window.ActiveXObject ){<br />
&#160;&#160;&#160;&#160;var xhr = new ActiveXObject('Microsoft.XMLHTTP');<br />
}<br />
function iniciar(){<br />
&#160;&#160;&#160;&#160;xhr.abort();<br />
&#160;&#160;&#160;&#160;if( xhr.multipart != null ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;xhr.multipart = true;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;xhr.open('GET', 'script-multipart.php?multipart', true);<br />
&#160;&#160;&#160;&#160;}else{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;xhr.open('GET', 'script-multipart.php', true);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;xhr.onreadystatechange = ler;<br />
&#160;&#160;&#160;&#160;xhr.send(null);<br />
}<br />
function ler(){<br />
&#160;&#160;&#160;&#160;if( xhr.readyState == 4 ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if( xhr.status == 200 ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.body.innerHTML = xhr.responseText;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if( ! xhr.multipart ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;iniciar();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
}<br />
window.onload = iniciar;</code></p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">&#60;?php<br />
set_time_limit(0);<br />
if( isset($_GET['multipart']) ){<br />
&#160;&#160;&#160;&#160;header('Content-type: multipart/x-mixed-replace;boundary="delimitador"');<br />
&#160;&#160;&#160;&#160;echo "<code>-</code><code>-</code>delimitador\n";<br />
}<br />
while( true ){<br />
&#160;&#160;&#160;&#160;if( isset($_GET['multipart']) ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo "Content-type: text/plain\n\n";<br />
&#160;&#160;&#160;&#160;}<br />
&#160;<br />
&#160;&#160;&#160;&#160;echo date("d/m/Y H:i:s"), "\n";<br />
&#160;<br />
&#160;&#160;&#160;&#160;if( isset($_GET['multipart']) ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo "<code>-</code><code>-</code>delimitador\n";<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;flush();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sleep(1);<br />
&#160;&#160;&#160;&#160;}else{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sleep(1);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exit();<br />
&#160;&#160;&#160;&#160;}<br />
}</code></p>
<h4>Controle de falha</h4>
<p>Nestes exemplos, o script nunca terminará a requisição e o navegador vai ficar esperando novas partes enquanto a página estiver aberta. Essa é realmente a idéia. Contudo, é possível que a execução do script ou a conexão com o servidor seja interrompida inesperadamente.</p>
<p>Como o navegador não recebeu a indicação do fim da resposta multipart (delimitador seguido de dois hífens), o XMLHttpRequest vai ficar esperando novas partes sem que haja qualquer aviso de erro ou timeout. Uma solução razoável é implementar o controle de timeout manualmente:</p>
<p><code style="display:block;border:1px solid #ccc;background:#eaeaea;">var xhr = new XMLHttpRequest();<br />
var t;<br />
function iniciar(){<br />
&#160;&#160;&#160;&#160;xhr.abort();<br />
&#160;&#160;&#160;&#160;xhr.multipart = true;<br />
&#160;&#160;&#160;&#160;xhr.open('GET', 'script-multipart.php', true);<br />
&#160;&#160;&#160;&#160;xhr.onreadystatechange = ler;<br />
&#160;&#160;&#160;&#160;xhr.send(null);<br />
&#160;&#160;&#160;&#160;contarTimeout();<br />
}<br />
function ler(){<br />
&#160;&#160;&#160;&#160;if( xhr.readyState == 4 &#38;&#38; xhr.status == 200 ){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;contarTimeout();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.body.innerHTML = xhr.responseText;<br />
&#160;&#160;&#160;&#160;}<br />
}<br />
function contarTimeout(){<br />
&#160;&#160;&#160;&#160;clearTimeout(t);<br />
&#160;&#160;&#160;&#160;t = setTimeout(iniciar, 5000);<br />
}<br />
window.onload = iniciar();</code></p>
<h4>FastCGI buffer</h4>
<p>Um problema que não consegui resolver foi o buffer do FastCGI. Por mais que o script faça flush e ob_flush, parece que o FastCGI mantém um buffer intocável. Neste caso essa solução não funcionaria.</p>
<p>No meu host, eu tenho a alternativa de executar scripts diretamente como CGI. Ao invés de ter um arquivo com extensão .php, criei o script com extensão .cgi e coloquei #!/usr/bin/php na primeira linha. Esta solução funcionou para testes, mas em produção é melhor procurar outra saída, como utilizar mod_php ou até mesmo uma forma de desabilitar o buffer do FastCGI.</p>
<p>&#160;</p>
<h3>Chat em PHP</h3>
<p>Eu já tinha publicado um Chat em PHP utilizando Long Polling<sup><a href="#referencia-chat-long-polling">[5]</a></sup> e acabei reescrevendo parte dele para utilizar XMLHttpRequest com requisição multipart.</p>
<p>Assim como no último o exemplo, o Javascript faz o controle manual de timeout. Para evitar reconexões quando ninguém mandar mensagem por muito tempo, o servidor envia um ping de tempos em tempos para manter a conexão ativa. Em navegadores que não utilizam a engine Gecko, a solução de Long Polling é utilizada.</p>
<p>Código fonte:<br />
<a href="http://code.google.com/p/chatildis/source/browse/trunk/chat-multipart.php?r=10">http://code.google.com/p/chatildis/source/browse/trunk/chat-multipart.php?r=10</a></p>
<p>Script para download:<br />
<a href="http://chatildis.googlecode.com/files/chat-multipart.php">http://chatildis.googlecode.com/files/chat-multipart.php</a></p>
<p>Da mesma forma que o chat anterior, esta implementação ainda utiliza o MySQL com tabela na memória para repassar as mensagens para todos os clientes. Este método está longe do ideal. Talvez em uma próxima ocasião eu tente alguma coisa com threads e Observer Pattern.</p>
<p>&#160;</p>
<h3>Referências</h3>
<ol>
<li><a id="referencia-netscape" href="http://web.archive.org/web/20070204030549/http://wp.netscape.com/assist/net_sites/pushpull.html">An exploration of dynamic documents</a></li>
<li><a id="referencia-comet" href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet (programming)</a></li>
<li><a id="referencia-mime" href="http://en.wikipedia.org/wiki/MIME#Multipart_messages">Multipurpose Internet Mail Extensions (MIME), Multipart messages</a></li>
<li><a id="referencia-flush" href="http://www.php.net/manual/en/function.flush.php">PHP: flush &#8211; manual</a></li>
<li><a id="referencia-chat-long-polling" href="http://garotosopa.wordpress.com/2008/07/27/chat-php-com-xhr-long-polling/">Chat PHP com XHR Long Polling</a></li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[تکنولوژی کامیت (Comet)]]></title>
<link>http://clubproject.wordpress.com/2008/01/08/%d8%aa%da%a9%d9%86%d9%88%d9%84%d9%88%da%98%db%8c-%da%a9%d8%a7%d9%85%db%8c%d8%aa-comet/</link>
<pubDate>Tue, 08 Jan 2008 10:54:37 +0000</pubDate>
<dc:creator>بامداد دشت بان</dc:creator>
<guid>http://clubproject.wordpress.com/2008/01/08/%d8%aa%da%a9%d9%86%d9%88%d9%84%d9%88%da%98%db%8c-%da%a9%d8%a7%d9%85%db%8c%d8%aa-comet/</guid>
<description><![CDATA[کامیت یک تکنولوژی تحت وب است که در آن وب سرور ، اطلاعات را به صورت نا متقارن به سمت کلاینت ( معمولاّ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>  <span style="font-weight:bold;">کامیت</span> یک تکنولوژی تحت وب است که در آن وب سرور ، اطلاعات را به صورت نا متقارن به سمت کلاینت ( معمولاّ مرورگر وب ) می فرستد بدون آنکه کلاینت صریحاً درخواستی کرده باشد.کامیت به شما این امکان را می دهد که بر اساس رخداد ها عمل کنید ، به صورت زنده با مرورگر تراکنش داشته باشید که در حالت های دیگر ( سایر معماری ها ) امکان پذیر نیست.<br />
واژه <b>کامیت </b>از سال 2006 مطرح شد ولی از سال ها قبل تحت نام های <i>Server push</i>, <i>HTTP push</i>, <i>HTTP Streaming</i>, <i>Pushlets</i>, <i>Reverse Ajax </i>و…. به کار می رفته است.اپلیکیشن های کامیت ارتباط های طولانی مدت HTTP بین وب سرور و کلاینت دارند (Long-Lived) که به سرور اجازه میدهد با وقفه به درخواست ها پاسخ دهد ، و هر موقع اطلاعات جدیدی بوجود آمد آن ها را به سمت کلاینت Push کنند.این متغایر با تعریفی که از ابتدا در مورد وب شده است می باشد که در آن مرورگر صفحه ی کامل وبی را در قبال فرستادن درخواست می گیرد.همچنین با مدلی که از آژاکس نیز ارائه شده است هم متغایر است که در آن مرور گر با درخواست خود قطعه ای از اطلاعات را برای بروز رسانی صفحه ی کنونی به کار می برد.اثری که کامیت می گذارد بسیار شبیه اپلیکیشن هایی است که به طور سنتی از آژاکس به همراه Polling  برای چک کردن وجود اطاعات جدید و بروز رسانی صفحه استفاده میکنند.<br />
ولی عملکرد بسیار بهینه شده و تاخیر و Server load  بسیار کم شده است.اپلیکیشن های وب همیشه به خاطر وجود محدودیت های دسترسی به منابع محلی و شبکه ای  و همچنین محدودیت هایی  که برنامه های درون مرورگری نسبت به اپلیکیشن های دسکتاپ کم توانا تر و کم انعطاف پذیر تر بودند،با پیشرفت مرورگر ها بسیاری از این محدودیت ها برداشته شد  و همین باعث بوجود آمدن اپلیکیش های توانای اینترنت شد.(Rich Internet Applications ) و اپلیکیشن های وب  به اپلیکیشن های دسکتاپ شبیه تر و شبیه تر  شدند.<br />
یکی از این مشکلات آن بود که هر قطعه ای از اطلاعات که از سمت سرور به سمت کاربر می رفت باید از طرف کاربر صراحتاّ درخواست می شد.  که این مشکل با بوجود آمدن <b>کامیت </b>برداشته شد.<b>کامیت </b>به سرور اجازه می داد به صورت زنده به رخ داد ها پاسخ دهد مانند به روز شدن منابع اطلاعات یا تغییر در آن ( شما شاهد تغییر آنی آن خواهید بود ) یا فرستادن پیغامی از طرف کاربر.کامیت بهترین راه حل برای حل این محدودیت می باشد.<br />
فرض کنید شما نشستید و آخرین تغییرات قیمت طلا را مشاهده می کنید برای اینکه قیمت جدید را ببینید احتیاجی نیست از جاوا ، فلش یا … استفاده کنید. شما با کامیت فقط احتیاج به یک مرورگر دارید.به محض تغییر در سرور در مرورگر شما اطلاعات بروز می شوند بدون اینکه از شما درخواستی برای بروز شدن فرستاده شده باشد.<br />
<b>مثال هایی از کامیت</b></p>
<p>این مثال ها مربوط به Light Streamer  نام فریم ورکی تجاری برای Comet و Ajax می باشد.<br />
توجه داشته باشید که در آن واحد فقط یک اپلیکیشن را باز کنید و چند تا با هم باز نکنید.<br />
برای سرعت بیشتر از مرورگر فایر فاکس استفاده کنید.1- نمودار زنده :<br />
<a href="http://app.lightstreamer.com/ChartDemo/" target="_blank">http://app.lightstreamer.com/ChartDemo/</a></p>
<p>2- لیست زنده قیمت های بازار بورس :<br />
<a href="http://app.lightstreamer.com/StockListDemo/index.html?fade=ON" target="_blank">http://app.lightstreamer.com/StockLi…x.html?fade=ON</a></p>
<p><a href="http://app.lightstreamer.com/StockListDemo/index.html?fade=ON" target="_blank"></a>Rss خوان زنده :<br />
<a href="http://app.lightstreamer.com/RSSDemo" target="_blank">http://app.lightstreamer.com/RSSDemo</a></p>
<p><a href="http://app.lightstreamer.com/RSSDemo" target="_blank"></a>مونیتوریگ زنده سرور  ( برای پهنای باند ، رم ، CPU …)<br />
<a href="http://app.lightstreamer.com/MonitorConsole/" target="_blank">http://app.lightstreamer.com/MonitorConsole/</a></p>
<p>اندازه گیری از راه دور مسابقات فرمول 1 :<br />
<a href="http://app.lightstreamer.com/WebTelemetryDemo/" target="_blank">http://app.lightstreamer.com/WebTelemetryDemo/</a></p>
<p>*نکته : طرز تلفظ درست Comet ،<u>کامیت</u> می باشد و نه <u>کامت</u> ، در تالار های گفتگوی فارسی دیدم که به اشتباه از کامت استفاده می کنند.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
