﻿<?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>Дневна доза нонсенс... &#187; WebSockets</title>
	<atom:link href="http://dailyffs.com/tag/websockets/feed/" rel="self" type="application/rss+xml" />
	<link>http://dailyffs.com</link>
	<description>Софтуерно-инженерна му работа</description>
	<lastBuildDate>Tue, 03 Jan 2012 01:34:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Firefox 4 идва без WebSockets</title>
		<link>http://dailyffs.com/2010/firefox-4-comes-without-websockets/</link>
		<comments>http://dailyffs.com/2010/firefox-4-comes-without-websockets/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 11:49:50 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[WebSockets]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=695</guid>
		<description><![CDATA[За съжаление най-якият фичър на HTML5 - WebSockets ще бъде изключен по подразбиране от Firefox 4. Причините са евентуални пробиви на сигурността в проксита и всичко, което е между браузъра и крайния сървър.<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-comes-without-websockets/' addthis:title='Firefox 4 идва без WebSockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>За съжаление най-якият фичър на HTML5 &#8211; WebSockets ще бъде изключен по подразбиране от Firefox 4. Причините са евентуални пробиви на сигурността в проксита и всичко, което е между браузъра и крайния сървър.</p>
<p>Тестове показват, че е напълно възможно да се създаде proxy cache poisoning (да се вкара вреден код в кеша на проксито), защото прокситат не разбират от Upgrade handshake-а, който WebSockets ползва. Това дефакто е проблем на прокситата, а не на протокола на WebSocket-ите, но за жалост не е възможно да се оправят всички прокси сървъри по света <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , за това се налага да се префасонира протокола на сокетите <img src='http://dailyffs.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> . Препоръката за сега е да се промени стандарта и да се полза CONNECT handshake-a вместо Upgrade handshake, тъй като прокситата го интерпретират правилно.</p>
<p>Най-вероятно няма да видим WebSocket-и във Firefox скоро, поне докато проблемът не бъде разрешен и стандартът не дефинира нов метод за handshake.</p>
<p>Повече подробности може да прочетете на <a href="http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/" target="_blank">http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/</a> и <a href="http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html" target="_blank">http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html</a></p>
<p><strong>Update:</strong> Opera спира поддръжката на WebSockets също &#8211; <a href="http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability" target="_blank">http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-comes-without-websockets/' addthis:title='Firefox 4 идва без WebSockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/firefox-4-comes-without-websockets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 &#8211; Предисторията</title>
		<link>http://dailyffs.com/2010/html5-story/</link>
		<comments>http://dailyffs.com/2010/html5-story/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 12:44:48 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[WebSockets]]></category>
		<category><![CDATA[WHATWG]]></category>
		<category><![CDATA[предистория]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=398</guid>
		<description><![CDATA[С течение на времето стандарта става все по-голям и по-разнообразен като до 2010 година в него вече влизат функционалности за запис и възпроизвеждане на видео и звук, няколко варианта за двупосочна връзка между потребителския клиент и уеб сървъра, няколко вида офлайн съхранение на данни в браузъра (вкл. и с база данни), възможност за чертаене на екрана, възможност за директно внасяне на MathML и SVG код в HTML документа<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/html5-story/' addthis:title='HTML5 &#8211; Предисторията '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>Тази публикация е първата от поредица статии за HTML5. Пиша ги  основно по две причини &#8211; обичам HTML5 стандарта и искам да помогна за  популяризирането му. Дано ви харесат и приятни занимания с HTML5 <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </em></p>
<p><img class="aligncenter" title="HTML5" src="http://dailyffs.com/shotme/?2qoP6V" alt="" width="395" height="137" /></p>
<div>
<p style="text-align: justify;">Веднага след като <a href="http://www.w3.org/" target="_blank">W3C</a> завършиха стандарта HTML 4, се заеха с разработката на напълно нов уеб  език &#8211; XHTML 2, който макар и да е &#8222;XHTML&#8220; няма нищо общо с XHTML 1.0  или 1.1, а на всичкото отгоре не е съвместим и с тези предни версии. По  този начин браузър-вендорите трябваше рано или късно да започнат да  поддържат два езика за структуриране и представяне на уеб страници,  които нямат много общо по между си. Естествено никой не се съгласи на  това безумие и след като до 2004 година, никой от водещите браузъри не  беше имплементирал абсолютно нищо от XHTML 2, a <a href="http://www.w3.org/" target="_blank">W3C </a> не желаеше да отстъпи и да прекрати разработката на стандарта,  производителите на браузъри (Microsoft, Apple, Mozilla и Opera) просто  се оттеглиха и създадоха собствен работна група - <a href="http://www.whatwg.org/" target="_blank">WHATWG</a>, чиято цел бе да разработи нов HTML стандарт,  който да е съвместим с предни версии и да предлага нови  функционалности, достъп до периферни устройства и по-лесно и уеднаквено  разработване на уеб приложения. Няколко години след това <a href="http://www.w3.org/" target="_blank">W3C</a> най-накрая забелязват, че никой не се вълнува от съдбата на  XHTML 2, но пък <a href="http://www.whatwg.org/" target="_blank">WHATWG</a> доста  напредват с новия неофициален стандарт, и след като самият <a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee" target="_blank">Тим Бърнърс-Лий</a> пише в блога си, че нещата около XHTML 2 не вървят, <a href="http://www.w3.org/" target="_blank">W3C </a> най-накрая се вразумяват. През 2007 година <a href="http://www.w3.org/" target="_blank">W3C </a>официално решават да прекратят работа по XHTML 2 и да се обединят  с <a href="http://www.whatwg.org/" target="_blank">WHATWG</a>, за да разработят заедно новия стандарт &#8211; <strong>HTML5</strong>.</p>
<p style="text-align: justify;"><a href="http://dailyffs.com/wp-content/uploads/2010/06/html5.jpg"><img class="alignleft" title="html5" src="http://dailyffs.com/wp-content/uploads/2010/06/html5.jpg" alt="" width="103" height="109" /></a>С течение на времето стандарта става  все по-голям и по-разнообразен като до 2010 година в него вече влизат  функционалности за запис и възпроизвеждане на видео и звук, няколко  варианта за двупосочна връзка между потребителския клиент и уеб сървъра,  няколко вида офлайн съхранение на данни в браузъра (вкл. и с база  данни), възможност за чертаене на екрана, възможност за директно внасяне  на MathML и SVG код в HTML документа, полета за въвеждане на специфични  данни (например телефон или e-mail), един куп нови елементи, подобрена  семантика в структурата на уеб страниците, нов стандартизиран начин за  токенезиране и построяване на дървото от елементи в браузъра. Последното  ще накара производителите на браузъри да не си измислят сами как да се  интерпретира невалидния HTML5 код, а да следват ясно зададен алгоритъм,  така че страниците да изглеждат еднакви на всички браузъри.</p>
<p style="text-align: justify;">До тук всичко е повече от красиво, но следва една обезпокоителна  новина &#8211; HTML5 ще бъде записан като задължителен стандарт през 2022  година, а като препоръчителен стандарт едва през 2012. Това значи, че на  теория производителите на браузъри могат да си седят кротко и да се  ослушват до 2022 година, с което да пречат на цялата работа по  внедряването на стандарта в уеб пространството. Реално обаче това не е  така, тъй като  всяка нова версия на популярните браузъри поддържа все  повече и повече от новия стандарт. Очакванията са, че паралелно с  официалното завършване на HTML5 (2012г.) повечето браузъри ще са го  имплементирали. Това е напълно разбираемо, защото в  крайна сметка хората, които пишат стандарта са хората, които правят и  уеб браузърите.</p>
<p style="text-align: justify;"><a href="http://dailyffs.com/wp-content/uploads/2010/06/screenshoot.jpg"><img class="alignleft" title="screenshoot" src="http://dailyffs.com/wp-content/uploads/2010/06/screenshoot.jpg" alt="" width="141" height="82" /></a>Аз се запалих по HTML5 лятото на  2009 година, когато за първи път видях частична поддръжка на стандарта (Canvas елемента) в  Firefox 3.5. Бях меко казано изненадан от това, което предлагаше и реших  да експериментирам с едно малко уеб приложение - <a href="http://dailyffs.com/shotme/" target="_blank">ScreenShotMe</a>,  което да предлага минимална редакция и ъплоуд на изображение от  клипборда. Написването на кода (макар и без много примери в нета) беше  лесно, като в резултат с малко код се постигна прилична функционалност.  Следващото нещо, което ми направи силно впечатление бе появата на <a href="http://en.wikipedia.org/wiki/WebSockets" target="_blank">WebSocket-ите</a> в Google Chrome през декември 2009, като те предлагаха дуплексна връзка  между клиента и сървъра. Opera пък поддържат HTML5 Forms &#8211; нови  потребителски контроли като слайдер, color picker и др. Само тези  няколко нови функционалности загатват за десетките нови онлайн  приложения, които може да видим скоро на белия свят. Например директна  редакция на снимките във Facebook, Skype в браузъра, офлайн достъп до  електронната поща и др.</p>
<p style="text-align: justify;">Макар че HTML5 e още чернова и e далеч от поява на белия свят, горещо  препоръчвам уеб дивелопърите да не чакат 2012 или 2022 година, за да се  запознаят по-детайлно с HTML5, защото този нов стандарт ще отвори  вратите за един куп нови и интерактивни уеб приложения!</p>
</div>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/html5-story/' addthis:title='HTML5 &#8211; Предисторията '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/html5-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бъдещето на телекомуникациите &#8211; Web Sockets</title>
		<link>http://dailyffs.com/2010/the-future-web-sockets/</link>
		<comments>http://dailyffs.com/2010/the-future-web-sockets/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 12:06:13 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[WebSockets]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=263</guid>
		<description><![CDATA[Най-голямата спънка при разработката на богати уеб приложения до сега е липсата на двупосочна връзка &#8211; от клиента към сървъра и от сървъра към клиента. Решението на този проблем винаги е било голяма болка и страдания, като най-общо се ползват чести запитвания към сървъра, на които той в 90% от времето  връща празен response или [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/the-future-web-sockets/' addthis:title='Бъдещето на телекомуникациите &#8211; Web Sockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignleft" title=" " src="http://farm1.static.flickr.com/77/207253914_d4b38c5006.jpg" alt="" width="91" height="126" />Най-голямата спънка при разработката на богати уеб приложения до сега е липсата на двупосочна връзка &#8211; от клиента към сървъра и от сървъра към клиента. Решението на този проблем винаги е било голяма болка и страдания, като най-общо се ползват чести запитвания към сървъра, на които той в 90% от времето  връща празен response или <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> (познато още като long polling най-общо). И двата начина са тромави и ресурсоемки&#8230; даже бих ги определил като законни <a href="http://en.wikipedia.org/wiki/Denial-of-service_attack">DoS</a> атаки. И всичко това за да се симулира нещо подобно на двупосочна връзка.<br />
Е, дните на безсмислени request-и и празни response-и отминаха, защото HTML5 предлага няколко варианта за решение на този казус. Ще се спра само на един от тях, на тъй наречените <a href="http://dev.w3.org/html5/websockets/">Web Socket</a>-и. Както сигурно се досещате става въпрос за сокет съединения, макар и леко модифицирани и орязани, които могат да се създават и управляват чрез Javascirpt. Освен че тези web socket-и могат само да започват връзка, но не и да стоят и да слушат за постъпване на такава, те имат и собствен допълнителен протокол, с който си комуникират със сървърното приложение. Важното в случая е че дуплексна връзка има и то на много ниска цена (от към писане на код). При създаване на сокет се оказват callback функции за четене, възникване на грешка и отваряне/затваряне на връзката, така че когато някое от изборените събития се случи, тези callback функции се извикват и обработката на данни пада във вашите ръце. Това намалява драстично главоболията породени от блокиращи/неблокиращи сокети, безкрайни цикли, exception-и и какво ли още не.<br />
От сървърна гледна точка нещата също са прости, кодът който е нужен за успешна комуникация с клиента е съвсем стандартен за сървърно сокет приложение, с изключение на едни служебни съобщения, които Web Socket-ите очакват и от които не може да се бяга.</p>
<p style="text-align: justify;">Понеже всичко до сега звучи прекалено хубаво, ще се наложи да ви приземя малко, защото Web Socket-и за сега се поддържат само от Google Chrome, но рано или късно и другите browser vendor-и ще се усетят откъде духа вятъра. И понеже вече се приземихте ето и едно примерно приложение, което сглобих &#8211; <a href="http://gist.github.com/339983">MultiDraw</a>. Идеята е чрез HTML5 Canvas елемента и Web Socket-и да се постигне паралелно рисуване от множество клиенти върху платно. Сървърната част е на Python 2.6 и ползва модула <a href="http://docs.python.org/library/asyncore.html">asyncore</a> от стандартната библиотека, който симулира асинхронно четене и писане от сокети.</p>
<p>Ето кодът, който се отнася до web socket-ите при клиента:</p>
<pre class="brush: jscript; title: ; notranslate">
var s = new WebSocket(&quot;ws://&quot; + document.location.host + &quot;:6789/&quot;);
// създаване на сокет съединение на порт 6789
s.onopen = function(e) { document.title = 'MultiDraw - Online'; }
// функция, която да се изпълни при установена връзка
s.onclose = function(e) { document.title = 'MultiDraw - Offline'; }
// функция, която да се изпълни при прекратяване на връзка
s.onmessage = function(e) {
// функция, която да се изпълни при пристигане на съобщение (съобщението е в e.data)
    var data = e.data.split(&quot; &quot;); // обработваме съобщението...
    draw(data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); // ... и чертаем върху Canvas-а
}
...
s.send([x, y, e.pageX, e.pageY, color, brushSize, lineCap, lineJoin].join(' ')); // изпращане на съобщение
</pre>
<p>При сървъра, единственото по-екзотично е хендшейк съобщението и това, че всяко съобщение започва с нулев байт и завършва с 0xFF (може да го видите в кода на сървъра).</p>
<p style="text-align: justify;">Кодът на клиента и сървъра е тук &#8211; <a href="http://gist.github.com/339983">http://gist.github.com/339983</a> .</p>
<p style="text-align: justify;">Happy Web Socketing <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: justify;">
<p style="text-align: justify;"><em>P.S. Незнам дали забелязахте, ама редакторът на спецификацията за Web Socket-ите е &#8222;<a href="mailto:ian@hixie.ch">Ian Hickson</a>, Google, Inc.&#8220;, така че няма нищо странно, че  тези чудесии се появяват именно в Chrome за първи път <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/the-future-web-sockets/' addthis:title='Бъдещето на телекомуникациите &#8211; Web Sockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/the-future-web-sockets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

