Commits

Anonymous committed 66a7be0

added first article

Comments (0)

Files changed (1)

articles/aweisberg/Meebo Article.rtf

Binary file added.
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f37\froman\fcharset238\fprq2 Times New Roman CE;}{\f38\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f40\froman\fcharset161\fprq2 Times New Roman Greek;}{\f41\froman\fcharset162\fprq2 Times New Roman Tur;}{\f42\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f43\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\f44\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f45\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f57\fmodern\fcharset238\fprq1 Courier New CE;}{\f58\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f60\fmodern\fcharset161\fprq1 Courier New Greek;}{\f61\fmodern\fcharset162\fprq1 Courier New Tur;}{\f62\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f63\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
+{\f64\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f65\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
+\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden 
+Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv 
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}
+{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid2038090804{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3874 ?;}{\levelnumbers;}\f3\cf0\fbias0 
+\fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320
+\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid192883630}{\list\listtemplateid2038090804\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid2012654688\'01\u-3874 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
+\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid458228043}{\list\listtemplateid169780676\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\cf0\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid2023821722}}{\*\listoverridetable{\listoverride\listid458228043\listoverridecount0\ls1}{\listoverride\listid192883630\listoverridecount0\ls2}
+{\listoverride\listid2023821722\listoverridecount0\ls3}}{\*\rsidtbl \rsid95231\rsid203701\rsid330166\rsid409772\rsid488193\rsid546043\rsid790215\rsid932978\rsid997328\rsid1269025\rsid1341075\rsid1397292\rsid1472022\rsid1535885\rsid1647147\rsid1710110
+\rsid1773992\rsid1912425\rsid2493031\rsid2512840\rsid2556609\rsid2844790\rsid2975077\rsid3030034\rsid3147385\rsid3150985\rsid3277102\rsid3414706\rsid3419366\rsid3543217\rsid3680894\rsid3941453\rsid4075608\rsid4128858\rsid4150129\rsid4391469\rsid4403430
+\rsid4472853\rsid4604724\rsid4719277\rsid4857802\rsid4981454\rsid5055694\rsid5178660\rsid5208976\rsid5320150\rsid5444728\rsid5505668\rsid5707425\rsid5980137\rsid6176249\rsid6245165\rsid6437643\rsid6499088\rsid6574968\rsid6651025\rsid6829442\rsid7033277
+\rsid7233964\rsid7276334\rsid7282010\rsid7410529\rsid7567098\rsid7815648\rsid7873654\rsid7999686\rsid8001776\rsid8002230\rsid8063365\rsid8130808\rsid8132275\rsid8153526\rsid8285851\rsid8341113\rsid8419844\rsid8663098\rsid8741203\rsid8782634\rsid8922260
+\rsid9062027\rsid9453875\rsid9708014\rsid9709130\rsid10049408\rsid10175840\rsid10421032\rsid10498122\rsid10510555\rsid10513699\rsid10570177\rsid10619164\rsid10645303\rsid11022909\rsid11035133\rsid11079671\rsid11107848\rsid11272336\rsid11303568
+\rsid11472016\rsid11479540\rsid11612444\rsid11623638\rsid11678556\rsid11737964\rsid11863253\rsid11864608\rsid11878519\rsid12138649\rsid12148004\rsid12462626\rsid12524841\rsid12586419\rsid12650119\rsid12661908\rsid13066777\rsid13240691\rsid13528567
+\rsid13700393\rsid13707987\rsid13924002\rsid13960122\rsid13966578\rsid14037712\rsid14044033\rsid14245365\rsid14252681\rsid14304937\rsid14619167\rsid14626947\rsid14813154\rsid15102166\rsid15167135\rsid15340239\rsid15430910\rsid15608726\rsid15814926
+\rsid15885971\rsid15886081\rsid15888235\rsid16012040\rsid16068588\rsid16148067\rsid16189493\rsid16270006\rsid16601424\rsid16714215}{\*\generator Microsoft Word 11.0.0000;}{\info
+{\title Meebo, the web-based chat client, is one of the pioneers of Comet apps}{\author Moses Weisberg}{\operator Moses Weisberg}{\creatim\yr2008\mo7\dy28\hr20\min8}{\revtim\yr2008\mo7\dy28\hr20\min8}{\version2}{\edmins1}{\nofpages2}{\nofwords741}
+{\nofchars4226}{\*\company  }{\nofcharsws4958}{\vern24613}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect 
+\widowctrl\ftnbj\aenddoc\donotembedsysfont1\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180
+\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1
+\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\nojkernpunct\rsidroot10570177 
+\fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}
+{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5208976 
+Meebo is one of the pioneers of Comet }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12148004 application}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5208976 s. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8153526 
+Their web-based chat client lets users connect to a variety of instant messaging services, all through a browser. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8419844 A}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5208976  recent article }{\rtlch\fcs1 \af0 
+\ltrch\fcs0 \insrsid14626947 on O\rquote Reilly }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5208976 shows }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10513699 that changing the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2556609 type of }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid10513699 Comet transport they use could provide significant benefits. 
+\par 
+\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7567098 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7567098 Meebo\rquote s lead software engineer Jian Shen notes that \'93
+most users are not aware of Web browser limitations and don't care,\'94 and his team has done a great job of meeting that challenge. One of their main technical achievements was building a customized }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid7567098\charrsid11079671 lighttpd}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7567098  server designed to be fast and scalable while running Comet applications.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4472853 
+ This allows them to closely mimic the desktop application experience. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7567098 
+\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid16714215 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964 The Problem of Dropped Connections}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964\charrsid11737964 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11737964 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4150129 The article points out that s}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13960122 potty internet connections are a problem for }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1341075 real-time }{\rtlch\fcs1 \af0 
+\ltrch\fcs0 \insrsid13960122 web }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13707987 application}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13960122  developers}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5444728  like Meebo\rquote s team}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid13960122 . If a user\rquote s connection drops and the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6176249 browser}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13960122  isn\rquote t notified, the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6176249 browser}{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13960122  won\rquote t automatically try to reestablish the connection. Furthermore, the user will think that the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13707987 application}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid13960122  is operating in a connected state}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1535885 ,}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13960122  and won't realize that they're missing messages. Meebo\rquote 
+s solution is to use the long-polling Comet transport with a fixed maximum duration, so that every 30 seconds the connection is reestablished.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1535885  Beca
+use of this frequent reconnection, the maximum time that the browser is unaware of the connection state is 30 seconds}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7815648 . }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2844790 These }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid1710110 reconnects }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid546043 also help with the problem of timeouts: browsers and proxies often close a}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2512840 n open}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid546043 
+ connection after around 60 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid546043\charrsid15102166 seconds}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1535885  of inactivity}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12650119\charrsid15102166 
+, and reconnecting every 30 seconds avoids the connection being closed}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110\charrsid15102166  unceremoniously}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12650119\charrsid15102166 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid1710110\charrsid15102166  }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3543217\charrsid15102166 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid546043 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964 A Flawed Solution}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964\charrsid11737964 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11737964\charrsid15102166 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15102166\charrsid15102166 Long-polling works, but it\rquote s not ideal. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3147385\charrsid15102166 The main problem with}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3147385  long}{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6437643 -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3147385 polling is that it reconnects too often: whenever the server sends data to the client the connection must be reestablished. }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid1710110 The 30 second fixed reconnect only happens if no data was sent to the client in that timeframe. Reconnecting }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 each time the server sends data}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110  }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 creates serious problems:
+\par 
+\par -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\insrsid790215\charrsid790215 L}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\insrsid1710110\charrsid790215 atency}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110  is up to 3X longer }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8130808 
+than a transport that }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8663098 doesn't need to reconnect each time it receives a frame}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10049408 . When the server needs to send a message right after it\rquote 
+s sent another message, the browser has to }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15885971 wait for the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10049408 first message to arrive, the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14619167 
+reconnection to the server to occur, and }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15885971 the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14619167 second message to arrive}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15885971 . }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid8132275 If the connection didn\rquote t have to be reopened}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14619167 ,}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1269025  the second message could be sent immediately after the first message. }{\rtlch\fcs1 \af0 
+\ltrch\fcs0 \insrsid14044033 This is one reason why financial applications}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15888235 , which need }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11479540 top performance}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15888235 ,}{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14044033  use }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8741203 a}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14044033  streaming transport, as Shen mentions. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 
+\par 
+\par -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\insrsid790215\charrsid790215 Bandwidth}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 : E}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110 very reconnect requires bandwidth to send the}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid15608726  HTTP}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110  }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4403430 request and response}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215  headers.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12661908  }{\rtlch\fcs1 
+\af0 \ltrch\fcs0 \insrsid15888235 These add up to about 1 kilobyte}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 , meaning that if the server is sending 1 message per second there\rquote s a constant overhead of 1}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid15888235  }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 k}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15888235 ilobyte}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 /s}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15888235 econd}{\rtlch\fcs1 \af0 
+\ltrch\fcs0 \insrsid15608726  on top of the actual payload. This is bad for dial-up and mobile users, }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11737964 and even worse for the server, which }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 
+is the bottleneck for web }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11678556 applications}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 
+\par 
+\par -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\insrsid790215\charrsid790215 Cycles}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 : }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 Those HTTP headers must be parsed by the server, }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid11737964 and doing so }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4128858 wastes}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726  }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid790215 CPU cycles}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15608726 .}{\rtlch\fcs1 
+\af0 \ltrch\fcs0 \insrsid790215  
+\par 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964 The Solution: Streaming Transports
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\insrsid11737964\charrsid11737964 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 There is a }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964 type of }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 transport which doesn\rquote t need to reconnect after t}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid13924002 he server sends data: streaming.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608  Shen mentions it in the article, but says that it\rquote s worse for handling spotty connections because the connection stays open for a long time. }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1710110 
+\par 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4981454 But there\rquote s no reason we can\rquote t use Meebo\rquote s fixed maximum }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11035133 duration }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4981454 reconnect method with }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8741203 a}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1912425  }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4981454 streaming }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1912425 transport }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4981454 
+as well. T}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 he server }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12586419 can send}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608  a \'93restart stream\'94 frame to the browser every 30 seconds. The connection is }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12586419 then }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 closed and }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12586419 reopened, just like the maximum }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1647147 duration }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12586419 reconnect method}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964  for long}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11878519 -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964 polling}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid12586419 . }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8782634 This }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2493031 gives}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8782634  identical tolerance to dropped connections}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid4075608  but }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2493031 provides}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608  all the benefits of streaming (}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8782634 lower }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 
+latency, bandwidth, and cycles).
+\par 
+\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12138649 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6437643 And }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608\charrsid15430910 streaming}{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid4075608  can be much better at alerting the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14304937 browser}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608  of dropped connections than fixed max}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11035133 imum}{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608  duration long}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6437643 -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 polling. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12462626 This is }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid11472016 achieved by }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid932978 send}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12462626 ing}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid932978  a \'93heartbeat\'94
+ from the server to the client. A heartbeat is a tiny amount of data (~1 byte) sent without HTTP headers, meaning the cost both of bandwidth and }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12138649 server }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid932978 processin
+g is completely negligible. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12138649 If we send a heartbeat every 3 seconds}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6437643 ,}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12138649  the maximum time the }{\rtlch\fcs1 \af0 
+\ltrch\fcs0 \insrsid14304937 browser}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12138649  is unaware of the connection state drops from 30 seconds}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5980137  (with long}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10175840 -}{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5980137 polling)}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11878519  to 3 seconds. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7999686 Remember the timeout problem? }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2512840 
+Most of the timeouts only happen to inactive connections, and since the h}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7999686 eartbeats }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2512840 count as activity, we can}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7999686 
+ maintain }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2512840 streaming Comet }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7999686 connections for an indefinite period of time. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12138649 
+\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid4075608 
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964 Streaming does work with most firewalls, forward proxies, reverse proxies, and routers. But if a particular deployment of intermediaries does manage to thwart streaming, the }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid14304937 server}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964  can fall back to long}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11878519 -}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964 polling}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid14037712 . }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8341113 Meebo }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9708014 could}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8341113  adopt }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7233964 a}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1912425  }{
+\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8341113 streaming }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1912425 transport }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8002230 without any of the drawbacks they\rquote re concerned about, and }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid6499088 make their already great user experience even better. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8001776 Streaming }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2975077 always performs much better than long-polling, }{\rtlch\fcs1 \af0 \ltrch\fcs0 
+\insrsid8001776 so it\rquote s well worth the effort of switching over. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10513699 
+\par }}