<?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>TSW - That Should Work Blog &#187; air 2.0 beta</title>
	<atom:link href="http://blog.msdevstudio.net/tag/air-2-0-beta/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.msdevstudio.net</link>
	<description>Flash, Flex, Web e Aplicações Ricas para Internet!</description>
	<lastBuildDate>Tue, 07 Feb 2012 18:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Air 2.0 Beta, Servidor socket em 5 minutos!</title>
		<link>http://blog.msdevstudio.net/2010/01/06/air-2-0-beta-servidor-socket-em-5-minutos/</link>
		<comments>http://blog.msdevstudio.net/2010/01/06/air-2-0-beta-servidor-socket-em-5-minutos/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 13:40:32 +0000</pubDate>
		<dc:creator>Mário Santos</dc:creator>
				<category><![CDATA[Action Script & MXML]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA's Geral]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[air 2.0 beta]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Beta]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[socket]]></category>

		<guid isPermaLink="false">http://msdevstudio.com/blog/?p=1237</guid>
		<description><![CDATA[Bom, não era novidade que o AIR já permitia comunicação por sockets, mas a verdadeira novidade na versão 2.0 é que agora permite escutar também uma porta da nossa maquina para comunicações&#8230; Mas em que se traduz isto na realidade?? Fácil! A partir de agora podemos criar os nossos pequenos/médios servidores socket, que com algum [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignleft" title="Adobe Air 2.0 Beta" src="http://labs.adobe.com/technologies/air2/images/air2_225x50.jpg" alt="" width="225" height="50" />Bom, não era novidade que o AIR já permitia comunicação por sockets, mas a verdadeira novidade na versão 2.0 é que agora permite escutar também uma porta da nossa maquina para comunicações&#8230; Mas em que se traduz isto na realidade?? Fácil! A partir de agora podemos criar os nossos pequenos/médios servidores socket, que com algum trabalho até podemos criar um servidor web&#8230; claro que é um exagero, mas abre um mundo novo de possibilidades&#8230;.</p>
<p style="text-align: justify;">Então, a partir de agora as nossas aplicações passam também a poder ser servidores, quer de comunicação de dados ou até mesmo armazenamento&#8230; imaginem, podemos criar uma base de dados na nossa maquina, usando SQLLite, e expor os seus dados ao exterior usando funções locais isto através de uma qualquer porta&#8230;</p>
<p style="text-align: justify;">Isto não era qualquer novidade nos aplicativos desktop, mas trazendo esta nova funcionalidade os aplicativos AIR passam a poder ser usados para qualquer comunicação de dados permitindo mesmo que duas aplicações AIR em diferentes maquinas possam comunicar entre si sem qualquer necessidade de aplicações/bases de dados/back-ends terceiros&#8230; claro que teriam que ter conhecimento do ip de cada uma das maquinas, mas isso com um IP fixo resolve-se rapidamente.</p>
<p style="text-align: justify;">Decidi explorar esta nova funcionalidade, e a primeira prova de fogo foi logo para um projecto de um cliente, que consistia no desenvolvimento de um servidor que recebe-se dados de vários dispositivos através de uma porta, que grava-se esses dados numa base de dados e que envia-se uma resposta a cada dispositivo, dependendo do tipo de dados&#8230; Os dispositivos podem ser apenas 2 como 50, pelo que era uma verdadeira prova de fogo para o AIR e sua atípica gestão de memória já que o sistema receberia algumas dezenas de pedidos por minuto. Depois de dar uma vista de olhos às classes socket, percebi que era muito mais fácil  do que eu imaginava, o servidor foi feito com recurso a cerca de 50 linhas de código, tudo ficou a funcionar&#8230;. restava o teste em tempo real com os tais dispositivos&#8230;.</p>
<p style="text-align: justify;">Inicialmente apenas com 2 demonstrou ser rápido e eficaz, mas e com 20/30 dispositivos a enviar dados&#8230; foi entregue o projecto ao cliente para testes, depois de 1 semana e de mais de 40.000 ligações (apenas entradas, se contar as saídas serão 80.000) os gasto0s de memória mantiveram-se entre os 20 e 50 mb não ultrapassando este valor, e o sistema não encontrou qualquer falha, erro ou situações desconhecidas&#8230; Resumindo, sem muito tempo gasto, o AIR passou a ser o substituto de um sistema existente feito em delphi, e mantêm-se a correr quase à 2 meses 24/24h sem qualquer problema&#8230;.</p>
<p style="text-align: justify;">Os meus parabéns à adobe que realmente fez um excelente trabalho!! Agora segue a dica, como criar um servidor socket? facil&#8230; o mais complicado talvez seja instalar o SDK 2 beta para desenvolvimento, mas isso vocês descobrem facilmente nas <a href="http://labs.adobe.com/wiki/index.php/AIR_2:Release_Notes" target="_blank">release notes&#8230;</a></p>
<p style="text-align: justify;">Segue então uma explicação de como fazer o seu servidor socket em menos de 5 minutos&#8230;<span id="more-1237"></span>Olhem como é facil:</p>
<p>[coolcode lang="actionscript"]<br />
import flash.net.ServerSocket;</p>
<p>private var ss:ServerSocket;</p>
<p>//inicia o listner<br />
private function inicia():void {</p>
<p>ss=new ServerSocket();<br />
ss.addEventListener(Event.CONNECT, onLigaRecebido);<br />
ss.bind(9500,&#8221;0.0.0.0&#8243;); //localhost<br />
ss.listen();</p>
<p>}</p>
<p>//handler para ligacao recebida</p>
<p>private function onLigaRecebido(event:ServerSocketConnectEvent):void {<br />
var soc:Socket = event.socket as Socket;<br />
soc.addEventListener( ProgressEvent.SOCKET_DATA, handlerSocket);<br />
//soc.addEventListener( Event.CLOSE, onClientClose );<br />
//soc.addEventListener( IOErrorEvent.IO_ERROR, onIOError );<br />
}</p>
<p>//handler para  ler os dados do socket aberto<br />
public function handlerSocket(event:ProgressEvent):void<br />
{<br />
var soc:Socket = event.target as Socket</p>
<p>//lê a mensagem enviada pelo socket<br />
var message:String = soc.readUTFBytes( soc.bytesAvailable );<br />
//message contem os dados recebidos pelo socket</p>
<p>//trace(&#8220;Dados recebidos&#8230;.&#8221;+message);</p>
<p>/**Operações necessárias aqui&#8230;<br />
para resposta, é simples:<br />
soc.writeUTFBytes(MENSAGEM_A_ENVIAR_AQUI);<br />
soc.flush();</p>
<p>soc.close();<br />
**/<br />
}<br />
[/coolcode]</p>
<p style="text-align: justify;">Simples ah? depois os outros listeners é fácil certo? Como vêm é muito simples o uso do servidor socket, só não consegui foi fechar o socket, apesar do soc.close() existir este não propaga o evento close pelo socket, pelo que o dispositivo de destino não consegue detectar o encerramento do socket&#8230; alguma dica sobre o porquê disto estar a acontecer?</p>
<p style="text-align: justify;">Mas bom, já viram como se torna simples, e como isto pode ter inúmeras possibilidades&#8230;&#8230; veja por exemplo um servidor proxy feito rapidamente e com o código fonte disponível <a href="http://www.adobe.com/devnet/air/flex/articles/creating_socket_server.html#d" target="_blank">aqui</a>.</p>
<p style="text-align: justify;">Bom, é tudo por agora!</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msdevstudio.net/2010/01/06/air-2-0-beta-servidor-socket-em-5-minutos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

