<?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>Ajaxian &#187; Comet</title>
	<atom:link href="http://ajaxian.com/by/topic/comet/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 02 Feb 2012 22:23:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Drawing Together with Cappuccino and Node.js</title>
		<link>http://ajaxian.com/archives/drawing-with-cappuccino-nodejs</link>
		<comments>http://ajaxian.com/archives/drawing-with-cappuccino-nodejs#comments</comments>
		<pubDate>Fri, 23 Apr 2010 05:16:19 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Node]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9132</guid>
		<description><![CDATA[Saikat Chakrabarti of Mockingbird is looking to make the tool collaborative. Along the way he wanted to test out tools to make this happen, and one test ended up with a collaborative drawing program using Node.js with WebSocket support from Socket.IO: , the actual interesting parts that are doing anything other than serving static files <a href="http://ajaxian.com/archives/drawing-with-cappuccino-nodejs">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><object width="480" height="289"><param name="movie" value="http://www.youtube.com/v/WZi9yf4my_U&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/WZi9yf4my_U&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="480" height="289"></embed></object></p>
<p>Saikat Chakrabarti of <a href="http://gomockingbird.com/">Mockingbird</a> is looking to make the tool collaborative. Along the way he wanted to test out tools to make this happen, and one test ended up with <a href="http://techblog.gomockingbird.com/socket-to-em">a collaborative drawing program</a> using Node.js with WebSocket support from <a href="http://github.com/learnboost/socket.io">Socket.IO</a>:</p>
<blockquote><p>
, the actual interesting parts that are doing anything other than serving static files start with the line &#8220;var listener = io.listen&#8230;&#8221;.  On the client-side, I made a very simple Objective-J class that wraps the Socket.IO client called SCSocket (located in client/SCSocket.j).  It&#8217;s up to you to simply set a delegate on this class and implement any of four methods (see setDelegate: on SCSocket) to handle notifications from the backend.  To send notifications to the Node server, simple call [[SCSocket sharedSocket] sendMessage:].
</p></blockquote>
<p>Check out the <a href="http://github.com/saikat/drawtogether">code on GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/drawing-with-cappuccino-nodejs/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Faye: Bayeaux protocol Comet server for Node.js</title>
		<link>http://ajaxian.com/archives/faye-bayeaux-protocol-comet-server-for-node-js</link>
		<comments>http://ajaxian.com/archives/faye-bayeaux-protocol-comet-server-for-node-js#comments</comments>
		<pubDate>Tue, 09 Feb 2010 11:24:22 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Node]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8570</guid>
		<description><![CDATA[James Coglan has ported a Ruby/EventMachine Comet server to offer a new Node.js server on the Bayeux protocol. The project is Faye and you can check out the code on GitHub. On the client side: PLAIN TEXT HTML: &#160; &#60;script type="text/javascript" src="/comet.js"&#62;&#60;/script&#62; &#160; &#60;script type="text/javascript"&#62;// &#60;!&#91;CDATA&#91; &#160; &#160; CometClient = new Faye.Client&#40;'/comet'&#41;; &#160; &#160; CometClient.connect&#40;&#41;; <a href="http://ajaxian.com/archives/faye-bayeaux-protocol-comet-server-for-node-js">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>James Coglan has ported a Ruby/EventMachine Comet server to offer a new Node.js server on the Bayeux protocol. The project is <a href="http://blog.jcoglan.com/2010/02/02/faye-a-comet-client-and-server-for-node-js-and-rack/">Faye</a> and you can check out the code on <a href="http://github.com/jcoglan/faye">GitHub</a>.</p>
<p>On the client side:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-4">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"/comet.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>// <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color:#006600; font-weight:bold;">&#91;</span>CDATA<span style="color:#006600; font-weight:bold;">&#91;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; CometClient = new Faye.Client<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">'/comet'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; CometClient.connect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">// <span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-5');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-5">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">CometClient.<span style="color: #006600;">subscribe</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/path/to/channel'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// process received message object</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">CometClient.<span style="color: #006600;">publish</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/some/other/channel'</span>, <span style="color:#006600; font-weight:bold;">&#123;</span>foo: <span style="color: #3366CC;">'bar'</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And the backend....</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> http = require<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'http'</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">faye = require<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'./faye'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> comet = <span style="color: #003366; font-weight: bold;">new</span> faye.<span style="color: #006600;">NodeAdapter</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>mount: <span style="color: #3366CC;">'/comet'</span>, timeout: <span style="color:#800000;">45</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">http.<span style="color: #006600;">createServer</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>request, response<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>comet.<span style="color: #006600;">call</span><span style="color:#006600; font-weight:bold;">&#40;</span>request, response<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">response.<span style="color: #006600;">sendHeader</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span>, <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color: #3366CC;">'Content-Type'</span>: <span style="color: #3366CC;">'text/plain'</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">response.<span style="color: #006600;">sendBody</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'Hello, non-Comet request!'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">response.<span style="color: #006600;">finish</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">listen</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">9292</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Nice!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/faye-bayeaux-protocol-comet-server-for-node-js/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jetty introduces WebSocket support (relunctantly)</title>
		<link>http://ajaxian.com/archives/jetty-introduces-websocket-support-relunctantly</link>
		<comments>http://ajaxian.com/archives/jetty-introduces-websocket-support-relunctantly#comments</comments>
		<pubDate>Fri, 25 Dec 2009 11:47:59 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8348</guid>
		<description><![CDATA[Greg Wilkins tried to get people to do better than WebSocket as it was being defined. His BWTP proposal didn't get traction so what does he do? He introcuces a great Jetty WebSocket implementation: Chrome and Firefox will soon be supporting WebSocket, so WebSocket (for better or for worse) will soon be available in the <a href="http://ajaxian.com/archives/jetty-introduces-websocket-support-relunctantly">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Greg Wilkins tried to get people to <a href="http://blogs.webtide.com/gregw/entry/how_to_improve_websocket">do better than WebSocket</a> as it was being defined.  His <a href="http://bwtp.wikidot.com/main:rational">BWTP proposal</a> didn't get traction so what does he do? He introcuces a great <a href="http://cometdaily.com/2009/12/21/jetty-websocket-server/">Jetty WebSocket implementation</a>:</p>
<blockquote><p>
Chrome and Firefox will soon be supporting WebSocket, so WebSocket (for better or for worse) will soon be available in the wild.</p>
<p>So if you can’t beat them, join them. Having failed to convince others to create a better protocol, I’m now determined for Jetty to provide the best implementation of the protocol and to become the server of choice for WebSocket Comet development, deployment ( and experimenting with improving the protocol).</p>
<p>Jetty’s async IO architecture is ideally suited to providing a very scalable implementation of WebSocket that is well integrated with standard server-side java application environments. Thus Jetty-7.0.1 now includes a WebSocket server.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jetty-introduces-websocket-support-relunctantly/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EtherPad Goes Open Source</title>
		<link>http://ajaxian.com/archives/etherpad-goes-open-source</link>
		<comments>http://ajaxian.com/archives/etherpad-goes-open-source#comments</comments>
		<pubDate>Fri, 18 Dec 2009 21:32:58 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8307</guid>
		<description><![CDATA[Following their recent acquisition by Google, AppJet announced they would open source EtherPad, the collaborative, real-time, notepad. That's now done, and you can find the project home at - surprise, surprise - Google Code. Checkout Instructions Browse the Source What's especially cool about this is that Etherpad is Javascript on both sides of the wire. <a href="http://ajaxian.com/archives/etherpad-goes-open-source">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://farm3.static.flickr.com/2660/4195323637_9fd97b6703.jpg" title="etherpad2009" class="alignnone" width="500" height="181" /></p>
<p>Following their recent acquisition by Google, AppJet <a href="http://etherpad.com/ep/blog/posts/etherpad-back-online-until-open-sourced">announced</a> they would open source EtherPad, the collaborative, real-time, notepad. That's now <a href="http://etherpad.com/ep/blog/posts/etherpad-open-source-release">done</a>, and you can find the project home at - surprise, surprise - <a href="http://code.google.com/p/etherpad/">Google Code</a>.</p>
<p><a href="http://code.google.com/p/etherpad/source/checkout">Checkout Instructions</a></p>
<p><a href="http://code.google.com/p/etherpad/source/browse/trunk/">Browse the Source</a></p>
<p>What's especially cool about this is that Etherpad is Javascript on both sides of the wire. In a new ReadWriteWeb article on <a href="http://www.readwriteweb.com/archives/server-side_javascript_back_with_a_vengeance.php">Server-Side Javascript</a>, I wrote that EtherPad is probably the most popular site powered by Javascript (anyone want to up the ante?). As server-side Javascript is getting interesting again, with Comet a major driver, it's a big deal that we now have the entire source tree for a Comet-style, server-side Javascript, application that's been proven in the real world.</p>
<p>AppJet also released <a href="http://appjet.wordpress.com/2008/09/02/appjetjar-platform-in-a-jar/">appjet.jar</a> when they discontinued the general server-side Javascript platform earlier this year. Unfortunately, the download link is broken on AppJet.com, so I don't know if there's any way to get hold of the official version. It does, however, live on as a cloud-hosted offering at <a href="http://apps.jgate.de/">JGate</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/etherpad-goes-open-source/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Weelya Announces Ajax Push Engine (APE) v1.0</title>
		<link>http://ajaxian.com/archives/weelya-announces-ajax-push-engine-ape-v1-0</link>
		<comments>http://ajaxian.com/archives/weelya-announces-ajax-push-engine-ape-v1-0#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:40:38 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8265</guid>
		<description><![CDATA[The team at Weelya announced v1.0 of the Open source APE JavaScript Framework &#038; APE Server, their comet-based push engine created to ease the client/server communication. New features in APE 1.0: New and improved communication protocol : Entirely using JSON and fully extensible. Several commands can be nested in one request. New transport methods : <a href="http://ajaxian.com/archives/weelya-announces-ajax-push-engine-ape-v1-0">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The team at <a href="http://www.weelya.com/">Weelya</a> announced v1.0 of the Open source <a href="http://www.ape-project.org/">APE JavaScript Framework &#038; APE Server</a>, their comet-based push engine created to ease the client/server communication.</p>
<p>New features in APE 1.0:</p>
<ul>
<li><strong>New and improved communication protocol :</strong>
<ul>
<li>Entirely using JSON and fully extensible.</li>
<li>Several commands can be nested in one request.</li>
</ul>
</li>
<li><strong>New transport methods :</strong>
<ul>
<li>XHRStreaming : A single connection is used to send and receive data. Better performance<br />
and reduced transfer delays.
</li>
<li>JSONP : Allows to place «cross-domain» requests.</li>
</ul>
</li>
<li><strong>Support for BSD &#038; Mac OS X (running the APE server) implemented by using KQueue</strong></li>
<li><strong>ServerSide JavaScript (SSJS) Implemented by using TraceMonkey (Mozilla SpiderMonkey)</strong></li>
<li><strong>Mootools support on the server side.</strong></li>
<li><strong>Complete Server-Side JavaScript API:</strong></li>
<li>
<ul>
<li>Handling of users, RAWs, Commands, Channels, Sockets</li>
<li>Use of non-blocking sockets (Client &#038; Server)</li>
<li>MySQL connector module</li>
<li>API for doing external HTTP requests</li>
<li>WebHooks</li>
</ul>
</li>
<li><strong>Log files for errors, access and general information</strong></li>
</ul>
<p>They've also created an <a href="http://www.ape-project.org/comics/1/chapter-i-common-let-s-push.html">online comic book</a> to get you familiar with what APE is all about.<br />
<a href="http://www.ape-project.org/comics/1/chapter-i-common-let-s-push.html"><br />
<img src="http://ajaxian.com/wp-content/images/ape10.png" alt="ape10" title="ape10" width="450" height="612" class="alignleft size-full wp-image-8272" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/weelya-announces-ajax-push-engine-ape-v1-0/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>NGiNX HTTP Push Module</title>
		<link>http://ajaxian.com/archives/nginx-http-push-module</link>
		<comments>http://ajaxian.com/archives/nginx-http-push-module#comments</comments>
		<pubDate>Thu, 19 Nov 2009 11:15:48 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7938</guid>
		<description><![CDATA[Even PHP developers can write web applications that use all sorts of fancy long-polling. That is what Leo said about his NGiNX HTTP push module: This module turns Nginx into an adept HTTP Push and Comet server. It takes care of all the connection juggling, and exposes a simple interface to broadcast messages to clients <a href="http://ajaxian.com/archives/nginx-http-push-module">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Even PHP developers can write web applications that use all sorts of fancy long-polling.
</p></blockquote>
<p>That is what Leo said about his <a href="http://pushmodule.slact.net/">NGiNX HTTP push module</a>:</p>
<blockquote><p>
This module turns Nginx into an adept HTTP Push and Comet server. It takes care of all the connection juggling, and exposes a simple interface to broadcast messages to clients via plain old HTTP requests. This lets you write live-updating asynchronous web applications as easily as their old-school classic counterparts, since your code does not need to manage requests with delayed responses.</p>
<p>NHPM fully implements the Basic HTTP Push Relay Protocol, a no-frills publisher/subscriber protocol centered on uniquely identifiable channels. It it an order of magnitude simpler and more basic than similar protocols (such as Bayeux). However, this basic functionality together with the flexibility of the server configuration make it possible to reformulate most HTTP Push use cases in Basic HTTP Push Relay Protocol language with very little application- and client-side programming overhead.
</p></blockquote>
<p>Configure NGiNX and write some <a href="http://pushmodule.slact.net/js/dumbchat.js">code to talk to it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/nginx-http-push-module/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WebSync: Comet for IIS</title>
		<link>http://ajaxian.com/archives/websync-comet-for-iis</link>
		<comments>http://ajaxian.com/archives/websync-comet-for-iis#comments</comments>
		<pubDate>Fri, 30 Oct 2009 11:02:01 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7768</guid>
		<description><![CDATA[The following is a guest post. If you have something to say to the Ajaxian community, please feel free to either link us to your work, or give us a guest posting that goes into detail! Contact us. My name is Jerod Venema, and I'm excited to write to you about our new Comet server <a href="http://ajaxian.com/archives/websync-comet-for-iis">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><em>The following is a guest post. If you have something to say to the Ajaxian community, please feel free to either link us to your work, or give us a guest posting that goes into detail! <a href="mailto:ajaxians@ajaxian.com">Contact us</a>.</em></p>
<p>My name is Jerod Venema, and I'm excited to write to you about our new Comet server for the Microsoft stack - WebSync.  It is written in 100% managed C#, and uses IIS to reach incredibly high user concurrency. Despite being written in C#, we've made it easy to integrate other languages as well by pre-building client libraries and allowing generic HTTP requests to send messages.</p>
<p>There are many challenges in getting a Comet server to operate efficiently in any language, and the .NET environment delivers its own set of unique challenges.  One of the biggest challenges we faced was how to make IIS "play nice" when scaling to tens of thousands of concurrent HTTP connections and message transactions.  A great deal of time was spent minimizing the memory footprint (even to the point of lazy object construction), optimizing libraries, and digging through pages of profiler results.  Multi-threading reared its ugly (but powerful) head on more than one occasion as we sought to take maximum advantage of multiple CPU cores while keeping locking and concurrency issues to a minimum.  We even ended up writing a new lock-free data structure similar to a linked queue that allows us to perform multiple-writer add/remove operations - very helpful when dealing with large lists of clients and messages. Once all was said and done, we tested on a $500 Acer desktop and saw over 30,000 concurrent users and 25,000 messages per second. (We were pretty pumped when we saw some of those numbers coming through!)</p>
<p>Once we were satisfied with the server's performance, we set our sights on a JavaScript client. We had originally been using the Dojo Toolkit, but the overhead was more than what we wanted (it rang in at about 90k after compression, but before gzipping), so we wrote our own library that, when compressed and gzipped, comes across the wire at about 8k total (just over 15k before gzipping). We also ran into a slew of cross-browser issues (of course), in particular when dealing with long-lived HTTP connections. A bit of effort, though, and we can now claim the client to be fully compatible with over a dozen browsers, from IE5.5 all the way to the iPhone and Android browsers.  Being fans of open-source technology (even in a Microsoft world), we decided to use the Bayeux transport protocol rather than develop our own, so any Bayeux-compliant client can link in to the server.</p>
<p>We also spent some time on making it easy to integrate into non-browser applications. One of the really neat features is the ability to publish data via a simple GET/POST request, so it can integrate into any application that can make a web request, regardless of the language. If you're writing in PHP or .NET, we've made life even easier by writing publishers that wrap up the creation and invocation of the web request into single method calls.</p>
<p>Oh, and we've got a hosted version too (WebSync On-Demand), so people with smaller sites who don't want the cost of hosting their own Comet server can still get all the benefits of a full Comet solution. For the On-Demand solution we've also implemented request proxing, which allows developers to direct the low-impact publish and subscribe requests to their server first, so they can pre-process any incoming messages (to add authentication, save messages to a database, etc). And again, for PHP or .NET users, it's a one-liner to implement.</p>
<p>Anyway, it's a pretty neat product, easy to get started with, and as I said, we're pretty excited and proud of it, so <a href="http://www.frozenmountain.com/websync">check it out</a> including <a href="http://www.frozenmountain.com/websync/demos">demos</a> or <a href="http://www.frozenmountain.com/documentation/tutorials">tutorials</a> and let us know what you think!</p>
<p><object width="400" height="270"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4748722&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4748722&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="270"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/websync-comet-for-iis/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Kamaloka: AMQP implementation in JS</title>
		<link>http://ajaxian.com/archives/kamaloka-amqp-implementation-in-js</link>
		<comments>http://ajaxian.com/archives/kamaloka-amqp-implementation-in-js#comments</comments>
		<pubDate>Tue, 08 Sep 2009 11:28:25 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[amqp]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7332</guid>
		<description><![CDATA[Would you like to talk messaging directly from the browser? Kamaloka is a new library that speaks AMQP. You can easily tie to Orbited but also, in theory, any other library that speaks TCPSockets. PLAIN TEXT JAVASCRIPT: &#160; &#160; &#160;Orbited.settings.port = 9000; &#160; &#160;amqp_broker_port = 7000; &#160; &#160; &#160;amqp_conn = amqp.Connection&#40;&#123;host: 'localhost', &#160; &#160; &#160; <a href="http://ajaxian.com/archives/kamaloka-amqp-implementation-in-js">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Would you like to talk messaging directly from the browser? <a href="http://www.j5live.com/2009/09/03/introducing-kamaloka-js-amqp-javascript-bindings/#">Kamaloka</a> is a new library that speaks <a href="http://amqp.org/">AMQP</a>. You can easily tie to <a href="http://orbited.org/">Orbited</a> but also, in theory, any other library that speaks TCPSockets.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-8');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-8">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;Orbited.<span style="color: #006600;">settings</span>.<span style="color: #006600;">port</span> = <span style="color:#800000;">9000</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;amqp_broker_port = <span style="color:#800000;">7000</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;amqp_conn = amqp.<span style="color: #006600;">Connection</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>host: <span style="color: #3366CC;">'localhost'</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; port: amqp_broker_port,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send_hook: <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>msg<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #009900; font-style: italic;">// for debugging</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;append_msg<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'SENT'</span>, msg<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; recive_hook: <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #009900; font-style: italic;">// for debugging</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; append_msg<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'RECV'</span>, data<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; amqp_conn.<span style="color: #006600;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// You should have your server generate a UUID since browser methods</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// are unreliable at best</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; session = amqp_conn.<span style="color: #006600;">create_session</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'not_a_great_id'</span> + <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Date<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">getTime</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> + Math.<span style="color: #006600;">random</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> fedoraproject = <span style="color: #3366CC;">"org.fedoraproject-"</span> + session.<span style="color: #006600;">name</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; session.<span style="color: #006600;">Queue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'declare'</span>, <span style="color:#006600; font-weight:bold;">&#123;</span>queue:fedoraproject, exclusive:<span style="color: #003366; font-weight: bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; session.<span style="color: #006600;">Exchange</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'bind'</span>, <span style="color:#006600; font-weight:bold;">&#123;</span>exchange: <span style="color: #3366CC;">"amq.topic"</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; queue: fedoraproject,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; binding_key: <span style="color: #3366CC;">"org.fedoraproject.#"</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Bind each queue to the control queue so we know when to stop</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; session.<span style="color: #006600;">Exchange</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'bind'</span>, <span style="color:#006600; font-weight:bold;">&#123;</span>exchange:<span style="color: #3366CC;">"amq.topic"</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; queue: fedoraproject,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; binding_key:<span style="color: #3366CC;">"control"</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/kamaloka-amqp-implementation-in-js/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jabbify Comet Service Released</title>
		<link>http://ajaxian.com/archives/jabbify-comet-service-released</link>
		<comments>http://ajaxian.com/archives/jabbify-comet-service-released#comments</comments>
		<pubDate>Thu, 16 Apr 2009 18:14:11 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6613</guid>
		<description><![CDATA[Brian Moschel and Justin Meyer of JavaScriptMVC have opened their Jabbify chat client into a general purpose Comet service called Jabbify. Some of their claims: Automatic Scaling: Jabbify scales to thousands of users per domain with no additional maintenance on your part. Instant setup: Download a script and you're developing with Comet in 30 seconds <a href="http://ajaxian.com/archives/jabbify-comet-service-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Brian Moschel and Justin Meyer of JavaScriptMVC have opened their Jabbify chat client into a general purpose Comet service called <a href="http://jabbify.com/">Jabbify</a>. Some of their claims:</p>
<blockquote>
<ul>
<li>Automatic Scaling: Jabbify scales to thousands of users per domain with no additional maintenance on your part.</li>
<li>Instant setup: <a href="http://jabbify.com/downloads/jabbify_get_started.zip">Download a script</a> and you're developing with Comet in 30 seconds or less.</li>
<li>Simple to use: Its easy. Really really easy. All you need is the <a href="http://jabbify.com/docs/classes/Jabbify.html">JavaScript API</a> or <a href="http://wiki.jabbify.com/index.php?title=The_Server_Side">GET requests</a>, technologies most developers are very familiar with. Simply connect and send your message.</li>
</ul>
</blockquote>
<p>Here's a graphic showing how the service works:</p>
<p><img src="http://ajaxian.com/wp-content/uploads/jabbify.png" alt="" title="Jabbify" width="470" height="382" class="alignnone size-full wp-image-6614" /></p>
<p>Here's an example of how to use Jabbify to send a message to all users connected to a domain:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-10">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'text/javascript'</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">'jabbify.js'</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'text/javascript'</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; // subscribe to incoming Comet messages</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; OpenAjax.hub.subscribe(&quot;jabbify.message.create&quot;, function(name, results){ alert(name) });</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; // connect to the server</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Jabbify.connect({name: &quot;Brian&quot;}, function(){</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; // send hello world to all connected users</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Jabbify.send(&quot;message&quot;, &quot;create&quot;, { message: &quot;hello world&quot; }); </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; }) </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>The service is currently in beta and is free to use; further:</p>
<blockquote><p>
It will always be free for websites with a small number of concurrent users. We’ve tried to make it as easy as possible to get started with plenty of docs and demos. There’s:</p>
<p>    * A <a href="http://jabbify.com/downloads/jabbify_get_started.zip">downloadable page</a> that runs from the filesystem<br />
    * A <a href="http://jabbify.com/home/comet_service">service overview page</a><br />
    * An <a href="http://jabbify.com/demos/api.html">API demo</a><br />
    * A <a href="http://jabbify.com/demos/keyboard.html">keyboard demo</a><br />
    * An open source <a href="http://wiki.jabbify.com/index.php?title=Get_Started_with_Simple_Client">chat client demo</a><br />
    * <a href="http://jabbify.com/docs/classes/Jabbify.html">API documentation</a> </p>
<p>We’d love to <a href="http://jabbify.com/">chat</a> with people to see what they think about a service like this.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jabbify-comet-service-released/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Transparent Comet with IceFaces</title>
		<link>http://ajaxian.com/archives/transparent-comet-with-icefaces</link>
		<comments>http://ajaxian.com/archives/transparent-comet-with-icefaces#comments</comments>
		<pubDate>Fri, 27 Mar 2009 12:00:34 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6441</guid>
		<description><![CDATA[We recently posted on Atmosphere, a new framework designed to provide an abstraction layer over Comet back-ends for Java web applications. At a personal level, this comes at an interesting time as over in the Mozilla Labs we're evaluating different Comet approaches for our upcoming collaboration release. As we looked at various options, we come <a href="http://ajaxian.com/archives/transparent-comet-with-icefaces">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ajaxian.com/wp-content/uploads/top_logo.jpg"><img src="http://ajaxian.com/wp-content/uploads/top_logo.jpg" alt="" title="IceFaces" width="343" height="110" class="alignnone size-full wp-image-6445" /></a></p>
<p>We recently posted on Atmosphere, a new framework designed to provide an abstraction layer over Comet back-ends for Java web applications. At a personal level, this comes at an interesting time as over in the Mozilla Labs we're evaluating different Comet approaches for our upcoming collaboration release. As we looked at various options, we come across some recent postings from Ted Goddard of IceFaces fame explaining their work on making Comet as simple as possible for Java developers, including a <a href="http://www.jroller.com/tedgoddard/entry/from_ajax_push_to_jsf">podcast</a> and <a href="http://www.jroller.com/tedgoddard/entry/ajax_push_is_easy">an overview of the IceFaces approach</a>.</p>
<p>Say what you will about JSF, their abstraction layer makes server and client implementation of Comet incredibly simple:</p>
<blockquote><p>
In other words, we can re-use our existing Ajax pipeline, and the application developer only needs to worry about one thing: requesting that a page be rendered. As you can imagine, this is only a few lines of code. With ICEfaces it looks like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-12');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-12">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">SessionRenderer.<span style="color: #006600;">addCurrentSession</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"ajaxian"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">// somewhere else in the presentation tier</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">SessionRenderer.<span style="color: #006600;">render</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"ajaxian"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>Not only does the application developer not have to worry about low-level protocol details or messaging, they don't even have to worry about what has changed on the page -- this is all taken care of by the declared binding between the page and the model.</p>
<p>To summarize: we have dynamic pages that can be rendered on the server at any time, and the updates are pushed to the browser where the changes are applied to the DOM. From the application developer's point of view, that's all there is to it.
</p></blockquote>
<p>Are you using a stack that makes Comet this easy? Have you been able to successfully implement Comet? Do you get sufficient performance from polling?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/transparent-comet-with-icefaces/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Atmosphere: Comet Abstraction Framework</title>
		<link>http://ajaxian.com/archives/atmosphere-comet-abstraction-framework</link>
		<comments>http://ajaxian.com/archives/atmosphere-comet-abstraction-framework#comments</comments>
		<pubDate>Mon, 16 Mar 2009 13:29:02 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6341</guid>
		<description><![CDATA[Jean-Francois Arcand announced a new Java-based framework that clients can code against for portable Comet support: Atmosphere 0.1-ALPHA1 is now officially released and support Tomcat, Jetty, Grizzly and GlassFish. Finally a Comet/Ajax Push framework you can build on top of it and deploy everywhere! One of the cool features of this release is that it <a href="http://ajaxian.com/archives/atmosphere-comet-abstraction-framework">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Jean-Francois Arcand <a href="http://weblogs.java.net/blog/jfarcand/archive/2009/03/atmosphere_01al_1.html">announced a new Java-based framework that clients can code against for portable Comet support</a>:</p>
<blockquote><p>
Atmosphere 0.1-ALPHA1 is now officially released and support Tomcat, Jetty, Grizzly and GlassFish. Finally a Comet/Ajax Push framework you can build on top of it and deploy everywhere!
</p></blockquote>
<p>One of the cool features of this release is that it auto-detects which server back-end you've deployed it into.</p>
<p>Among the materials in the release notes are <a href="http://is.gd/ngQv">two code samples</a> and a <a href="http://is.gd/l3hN">PDF discussing what Comet is and the motivation/design behind Atmosphere</a>.</p>
<p>Comet on Java just got easier, which is a welcome development indeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/atmosphere-comet-abstraction-framework/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bespin Talk at Mozilla Labs Meetup</title>
		<link>http://ajaxian.com/archives/bespin-talk-at-mozilla-labs-meetup</link>
		<comments>http://ajaxian.com/archives/bespin-talk-at-mozilla-labs-meetup#comments</comments>
		<pubDate>Wed, 11 Mar 2009 11:34:42 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Bespin]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6287</guid>
		<description><![CDATA[I went along last night to the London Mozilla Labs meetup, where Dion, Ben, and Joe delivered a presentation on Bespin. These are my notes from the event. Goals Bespin - initially an experiment, now interested to see how far it can go as a coding environment (among other things). "The editor of our dreams": <a href="http://ajaxian.com/archives/bespin-talk-at-mozilla-labs-meetup">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/bespin1.png" alt="" title="Bespin" width="470" height="192" class="alignnone size-full wp-image-6014" /></p>
<p>I went along last night to the London Mozilla Labs meetup, where Dion, Ben, and Joe delivered a presentation on <a href="https://bespin.mozilla.com/">Bespin</a>. These are my notes from the event.</p>
<h3>Goals</h3>
<p>Bespin - initially an experiment, now interested to see how far it can go as a coding environment (among other things).</p>
<p>"The editor of our dreams":</p>
<ul>
<li>Accessible from anywhere</li>
<li>Simple to use, like Textmate - for people who don't want to muck around with low-level details, too much time in version control</li>
<li>Wicked fast - many editors look okay initially but don't scale well with large files and fast editing</li>
<li>Rock-solid real-time collaboration - like SubEthaEdit - watch people in our time, e.g. follow someone like Brendan Eich as he codes (given that it's already open source). One of the meta-goals here is to lower the barriers for open-source development.</li>
<li>Integrated command-line, like Vi</li>
<li>"Self-hosted" environment - like Emacs. As a programmer, can get into its guts. And can do this kind of thing in real-time - modify the model as it runs (c.f. Eclipse - must re-compile)</li>
</ul>
<h3>Demo</h3>
<p>Dion demos interacting with the Bespin editor. (Always good to see how the creators eat their own dogfood.) Ben points out it's fast, thanks to Canvas. Some demos of the command-line, its extensibility, and collaboration features.</p>
<h3>Collaboration</h3>
<p>Moz hired Joe Walker of Comet/DWR fame a month ago. Joe explains collaboration goals.</p>
<p>Typical scenario - two coders working simultaneously, perhaps chatting over skype.</p>
<p>From Neil Fraser (worked on Google Docs stuff around this) - designed as a "little version control system" - sends out diffs and patches it (see <a href="http://code.google.com/p/google-mobwrite/">Mobwrite</a>. Bizzarely, the bottleneck is not the network or the patch, but the diff. And exarcebated by the fact that typing faster - doing more work - necessitates more diffing.</p>
<p>Joe shows debug messages in Firebug console - showing diff info going to and from the server</p>
<h3>Extra Features</h3>
<p>Code nav - heatmap showing all of code and what's been edited. recently. Example of a mashup component you can build.</p>
<p>e.g. IBM coder turned it into a Java compiler - by compiling the Java on the server. Used Bespin's server API. Likewise, the editor is also a distinct component - can use the editor for other (non-IDE) application - e.g. a wiki project using Bespin's editor to edit the wiki. Likewise, the command line is separate. And there's the underlying core, Thunderhead.</p>
<p>Ben further emphasises it's not just a rich client-side editor - server-side code analysis with the RESTful API.</p>
<h3>Upcoming Features</h3>
<p>Big things:</p>
<ul>
<li>Collaboration</li>
<li>VCS integration - integrate with Mercurial, etc etc</li>
<li>Ubiquity Integration</li>
<li>Server Side Javascript - can have different server implementations, could be Ruby etc, and want to implement one in JS</li>
</ul>
<p>Smaller:</p>
<ul>
<li>Some nice commands</li>
<li>Plan "follow me!"</li>
<li>Syntax highlighting</li>
<li>Design concepts</li>
<li>Templates ("create project Rails")</li>
<li>Editor functionality</li>
<li>... many more - need people to help with it (engaging with the community and supporting contributions in an open-sourcey way is a big theme in this talk)</li>
</ul>
<h3>Fin</h3>
<p>They leave us with <a href="http://rubyconf2008.confreaks.com/keynote.html">a clip of Dave Thomas @ RubyConf</a> asking if it's weird to love your software tools, and answering that you <strong>have to</strong> love your tools. Fair play!</p>
<h3>Questions and Answers</h3>
<p><b>Q. Distributed Version Control - will bespin support it?</b> Bespin designed for two basic use cases (a) standard thing - check in to repo etc (b) bespin.mozilla.com - SAAS type model.</p>
<p><b>Q. What data structure is being used for patch sets? Because a decent structure would make VCS possible.</b> Mobwrite - Neil Fraser's project behind Google Docs - so using that format, but we might expect it to change in the future.</p>
<p><b>Q. (me) Eating your own dogfood</b> Dogfooding by end of month, when VCS lands or using  Appcelerator Titanium to run off local file system.</p>
<p><b>Q. (about integration with Ubiqutiy I think?)</b> Ubiquity as the runtime and Bespin for authoring. Initially, separate to Ubiquity and then normalised commands with Ubiquity. Now just starting to share components like parser. Next phase, access to virtually all of Ubiquity and will work even without Moz browsers. And the other way round - running Ubiquity commands inside Bespin.</p>
<p><b>Q. With the collaboration engine, can you do more than code creation, e.g. drawing or spreadsheets?</b> Using Mobwrite, the engine behind Google Docs' collaboration - Mobwrite's restricted to text - as long as there are changes to some structure (ie it can be serialised), it's possible.</p>
<p><b>Q. Codes and tests in the cloud - should be great for continuous integration</b> There are various people already implementing the Bespin server API for other things too. With the code out in the cloud, very possible to do all sorts of things with the code. John Resig (also Moz) is also interested in this area - also wrt manual tests that are downloaded to various people's browsers and run locally. Maybe could even be automated using the aggregate crowd while the browser isn't doing anything else. Another project is <a href="http://labs.mozilla.com/2008/03/introducing-test-pilot/">Test Pilot (usability testing)</a>.</p>
<p>(On a related note, I mentioned later on it would be interesting to couple the code with real-time user data, e.g. a heatmap overlay on the code showing how much resources each segment used during real-world use.)</p>
<p><b>Q. Hyperlinking in code? Could you create ~implicit links, e.g. to other parts of the code?</b> Don't have hyperlinks because it's canvas! But will be able to implement these things - would be done as a syntax highlighter extension.</p>
<p><b>Q. Firstly, the name? Secondly, the offline capability - can I just run it directly off the local file system.</b> With Appcelerator Titanium, would feel like a real desktop app while offline, but can still access the cloud when connected. (No-one answered the name question ;)</p>
<p><b>Q. Mashups in the browser - loads of scope for in-editor mashups, will it be part of the editor framework</b> Right now, editor has an event bus - events like "he's opened the file, he's hit a key", so can set up events for this kind of thing. It's all based on an asynchronous model, so very possible.</p>
<p><b>Q. Will there be user testing - to see what people really want?</b> There's a huge list in Bugzilla for these kinds of things. This is a tech preview, missing a ton of functionality. Already improved, but a lot more to do.</p>
<p><b>Q. Vim or Emacs macros - which will be first?</b> Have implemented Elisp and Javascript, so it's only a matter of time. (cunningly avoided expressing a preference :)</p>
<p><b>Q. Functional reactive programming (FRP) - <a href="http://lambda-the-ultimate.org/node/1771">Flapjax</a> demonstrates the idea in JS - for pubsub. Would it be possible to extend the current pubsub framework into a FRP framework - avoids bugs around order .</b> Would be good to see something like that.</p>
<p><b>Q. Are you "re-inventing the web" with this stuff, i.e. finding that canvas doesn't support it?</b> Yes, do have to reinvent a lot of things - people coming together to discuss these things - ARIA etc. Very focused on accessibility. Two ways to do it - (a) hacks like the cut-and-paste to mirror what's happening; (b) longer-term - drive the browsers forward.</p>
<p>Aside - Bespin currently leaks memory. Browsers are now runtimes, so want to build a tool for memory tracking. (a) Log each garbage collection. (b) Graphical view of the heap. After that, tool after that is meta - a directory of all the tools  out there.</p>
<p><b>Q. On a much smaller scale, could it be used as a textarea?</b> Yes, Firefox engineers were keen to look at that.</p>
<p><b>Q. How much implemented in Javascript?</b> Very much the trend in Moz. cf. Aza Raskin's recent post on doing an extension in Javascript (*cough* Chrome *cough*). All the XUL stuff was necessary at the time. Javascript's not the bottleneck anymore.</p>
<p><b>Q. The name? (as was previously asked)</b> So with that, let's wrap up. </p>
<p>My colleague <a href="http://fnd.lewcid.org/blog/archive/53">Fred</a> has also posted his impressions.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/bespin-talk-at-mozilla-labs-meetup/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jsSO: Flash Shared Objects in Javascript</title>
		<link>http://ajaxian.com/archives/jsso-flash-shared-objects-in-javascript</link>
		<comments>http://ajaxian.com/archives/jsso-flash-shared-objects-in-javascript#comments</comments>
		<pubDate>Fri, 27 Feb 2009 10:41:49 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6132</guid>
		<description><![CDATA[Daniel Prieler has created a new library that allows realtime communication in JavaScript between clients. It works by embedding Flash in the page which is connected to a rtmp-flash-server. JSSO works like this: The data-transfer and the connection to the server are maintained by a simple embedded Flashmovie in your page. The communication with other <a href="http://ajaxian.com/archives/jsso-flash-shared-objects-in-javascript">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Daniel Prieler has created a new library that allows realtime communication in JavaScript between clients. It works by embedding Flash in the page which is connected to a rtmp-flash-server.</p>
<p><a href="http://pro-web.at/projects/jsso">JSSO</a> works like this:</p>
<blockquote><p>
The data-transfer and the connection to the server are maintained by a simple embedded Flashmovie in your page. The communication with other clients runs through the local Flashmovie and the Red5-Server.<br />
The data-flow between two clients looks like this:</p>
<p>Javascript/jsSO - Flashmovie - Red5-Server - Flashmovie - Javascript/jsSO
</p></blockquote>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-14');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-14">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Connect to to a shared object Handler (SOSample) on the Red5-Server and</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// use the objectName &quot;draw&quot;. The objectName is identical to a namespace</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// for your data or a chat-room.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// SOSample is the simplest shared object example of the Red5-server</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">jsSO.<span style="color: #006600;">connect</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'draw'</span>, <span style="color: #3366CC;">'rtmp://localhost/SOSample'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// On button click set someVar in the shared object</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">':button'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">live</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; jsSO.<span style="color: #006600;">set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'someVar'</span>, <span style="color: #3366CC;">'value'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Listen to changes on the shared object</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// event = A jquery event object</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// updates = If a var is updated it is set in the updates-object.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;See code below for usage</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// data = All data in the object</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">jsSO.<span style="color: #006600;">onSync</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>event, updates, data<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>updates.<span style="color: #006600;">someVar</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// someVar was updated</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; console.<span style="color: #006600;">log</span><span style="color:#006600; font-weight:bold;">&#40;</span>data.<span style="color: #006600;">someVar</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jsso-flash-shared-objects-in-javascript/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>UniversalComet: Make any web page a Comet end point</title>
		<link>http://ajaxian.com/archives/universalcomet</link>
		<comments>http://ajaxian.com/archives/universalcomet#comments</comments>
		<pubDate>Wed, 31 Dec 2008 12:02:11 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5543</guid>
		<description><![CDATA[How about if all you needed to do was: PLAIN TEXT JAVASCRIPT: &#160; var server = new Addressable.Server&#40;&#123; useGears: true &#125;&#41;; &#160; server.onmessage = function &#40;message&#41; &#123; &#160; &#160; &#160; &#160; log&#40;message&#41; &#125; &#160; server.connect&#40;function &#40;id, url&#41; &#123; &#160; &#160; log&#40;"Connected. Messages will appear here."&#41; &#160; &#160; $&#40;"#clientId"&#41;.html&#40;"Client-Url: "+url&#41; &#160; &#160; $&#40;"#testForm"&#41;.attr&#40;"action", url&#41; &#125;&#41; &#160; <a href="http://ajaxian.com/archives/universalcomet">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>How about if all you needed to do was:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-16');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-16">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> server = <span style="color: #003366; font-weight: bold;">new</span> Addressable.<span style="color: #006600;">Server</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span> useGears: <span style="color: #003366; font-weight: bold;">true</span> <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">server.<span style="color: #006600;">onmessage</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; log<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">server.<span style="color: #006600;">connect</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>id, url<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; log<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Connected. Messages will appear here."</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#clientId"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">html</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Client-Url: "</span>+url<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#testForm"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"action"</span>, url<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">function</span> log<span style="color:#006600; font-weight:bold;">&#40;</span>msg<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> log = $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#log"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006600;">html</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">""</span>+msg + <span style="color: #3366CC;">"&lt;br /&gt;"</span> + log.<span style="color: #006600;">html</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And you would have Comet end points to play with?</p>
<p>That is what Malte has given us with a proof of concept called <a href="http://joose-js.blogspot.com/2008/12/universalcomet-making-every-client.html">UniversalComet</a>:</p>
<blockquote><p>
I have developed a JavaScript library that makes it extremely easy to incorporate "<a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">comet</a>" or server-push technology into any web application without need for special programming or any special support on the server. Ressources needed on the server are also practically zero.</p>
<p>When you use the JavaScript library, you will receive an <a href="http://en.wikipedia.org/wiki/URI">URI</a> that identifies the client. Now you can make simple HTTP-GET requests to that URI with a message parameter and the client will receive the message immediately. Because only your application will know the un-guessable URI, the client should be save from unwanted messages. The use of HTTP-GET messages also allows sending messages in a "P2P"-fashion from client to client using JSONP cross-domain-messages.</p>
<p>The function that is passed to the connect-method receives the URI of the client and as soon as messages arrive they will be send to the onmessage-callback.</p>
<p>The JavaScript application uses "channels" to differentiate between different windows that the same client has open at any given time. These are cached in window.name. If you set window.name yourself this value is used. You can also set server.setChannel("myChannel") before you connect to name the channel yourself.
</p></blockquote>
<p>You can <a href="http://joose-js.googlecode.com/svn/trunk/playground/comet/python/static/demo/client.html">check out the demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/universalcomet/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Kaazing Gateway 8.12 Battlestar Available</title>
		<link>http://ajaxian.com/archives/kaazing-gateway-812-battlestar-available</link>
		<comments>http://ajaxian.com/archives/kaazing-gateway-812-battlestar-available#comments</comments>
		<pubDate>Mon, 29 Dec 2008 06:04:13 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5515</guid>
		<description><![CDATA[Kaazing keeps on moving with its Java Comet server, and just released a new version. It will be interesting to see if real-time connections take off in 2009. Kaazing is happy to announce the second major release of its Kaazing Gateway, an open source HTML 5 web server, which includes support for HTML 5 WebSockets. <a href="http://ajaxian.com/archives/kaazing-gateway-812-battlestar-available">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Kaazing keeps on moving with its Java Comet server, and just released a new version. It will be interesting to see if real-time connections take off in 2009.</p>
<blockquote><p>
Kaazing is happy to announce the second major release of its <a href="http://www.kaazing.org/confluence/display/KAAZING/What+is+Kaazing+Gateway">Kaazing Gateway</a>, an open source HTML 5 web server, which includes support for HTML 5 WebSockets. With the 8.12 release of Kaazing Gateway delivers even more HTML 5 features such as Server-sent Events, more advanced security services, and extended support for XMPP (Jabber) and STOMP (e.g. ActiveMQ, RabbitMQ, or OpenMQ).</p>
<p>Server-sent events make a substantial contribution to the HTML 5 specification; however, Kaazing Gateway makes that contribution even greater by enabling Broadcast Notifications, which makes it possible to send messages from a TCP-, UDP-, or Multicast-origin and deliver simultaneous updates to tens of thousands of end-users. Applications of Server-sent event broadcasting include sporting event updates, system notifications, financial market updates, and much more. </p>
<p>Kaazing Gateway's HTML 5 emulation libraries also include a number of updates. The libraries now enable any modern browser to support HTML 5 Server-sent Events, and introduce support for HTML 5 postMessage, which facilitates cross document messaging. Kaazing's HTML 5 libraries also include support for HTML 5 Offline Storage, which provides simple DOM-based storage solution.  Kaazing Gateway and its client libraries also now provide support W3C Access Controls for Cross-Site Requests, which is a mechanism to enable client-side cross-site requests, better known as Cross-site XmlHttpRequests.</p>
<p>Beyond extended support for HTML 5, Kaazing Gateway 8.12 also provides more advanced XMPP features such as group chat. This release also introduces STOMP-JMS Adapter, which allows you to adapt any existing Java Message Service (JMS) services (e.g. JBoss Messaging, Tibco EMS, OpenMQ, SwiftMQ, WebSphere MQ, etc. ) for use with Kaazing Gateway.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/kaazing-gateway-812-battlestar-available/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kaazing Gateway: HTML 5 WebSock Server Released</title>
		<link>http://ajaxian.com/archives/kaazing-gateway-html-5-websock-server-released</link>
		<comments>http://ajaxian.com/archives/kaazing-gateway-html-5-websock-server-released#comments</comments>
		<pubDate>Fri, 31 Oct 2008 11:06:04 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4934</guid>
		<description><![CDATA[Kaazing has released Kaazing Gateway, an open source HTML 5 WebSocket Server. The HTML 5 WebSocket specification is a standard that attempts to simplify much of the complexity around achieving bi-directional communications between browsers and servers. The specification provides a simple JavaScript interface that enables developers to open a full-duplex socket connection and connect directly <a href="http://ajaxian.com/archives/kaazing-gateway-html-5-websock-server-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/kaazing-powered.png" alt="" title="Kaazing" width="70" height="79" class="alignnone size-full wp-image-4933" style="float: right; padding: 8px;" /></p>
<p>Kaazing has <a href="http://www.kaazing.org/confluence/display/KAAZING/What+is+Kaazing+Gateway">released Kaazing Gateway</a>, an open source HTML 5 WebSocket Server.</p>
<blockquote><p>
The HTML 5 WebSocket specification is a standard that attempts to simplify much of the complexity around achieving bi-directional communications between browsers and servers. The specification provides a simple JavaScript interface that enables developers to open a full-duplex socket connection and connect directly to any TCP-based back-end service (for example, JMS, JMX, IMAP, Jabber, and so on).</p>
<p>Kaazing Gateway makes it possible for developers to take advantage of WebSockets today by providing a JavaScript library that emulates the HTML 5 WebSocket, making it possible to build applications that leverage the WebSocket interface and that can be deployed to both modern and future browsers.</p>
<p>The ultra high-performance server behind Kaazing Gateway can support tens of thousands of concurrent connections on a single node. Multiple instances can be clustered with traditional HTTP load-balancers or DNS round robin, making it possible to support any number of persistent client connections. In addition to large numbers of connections, Kaazing Gateway can also handle high data throughput thanks to its high-performance, staged event driven architecture (SEDA).</p>
<p>The Atlantis release of Kaazing Gateway also comes prepackaged with JavaScript clients for popular message services such as Apache ActiveMQ and RabbittMQ as well as clients for XMPP services such as OpenFire, Jabberd, and other popular chat servers. This makes it easy for you to quickly build web-based chat applications or messaging applications such as stock matrixes, online trading platforms, or online games.
</p></blockquote>
<p>What is the WebSocket API?</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-18">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">interface WebSocket <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; readonly attribute DOMString URL;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// ready state</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">const</span> unsigned short CONNECTING = <span style="color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">const</span> unsigned short <span style="color: #000066;">OPEN</span> = <span style="color:#800000;">1</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">const</span> unsigned short CLOSED = <span style="color:#800000;">2</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; readonly attribute int readyState;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// networking</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute EventListener onopen;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute EventListener onmessage;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute EventListener onclosed;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> postMessage<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> DOMString data<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> disconnect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/kaazing-gateway-html-5-websock-server-released/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Web Sockets, Comet, and a Panel</title>
		<link>http://ajaxian.com/archives/web-sockets-comet-and-a-panel</link>
		<comments>http://ajaxian.com/archives/web-sockets-comet-and-a-panel#comments</comments>
		<pubDate>Wed, 29 Oct 2008 15:18:54 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/web-sockets-comet-and-a-panel</guid>
		<description><![CDATA[Comet is starting to gain steam, although mainly through the term "real-time Web." A couple of the Comet folks posted at the same time, both talking about the technology in different ways. Ted Goddard answered a bunch of questions in WebSocket is neither Web nor Socket. Does WebSocket use TCP ports 81 and 815? How <a href="http://ajaxian.com/archives/web-sockets-comet-and-a-panel">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Comet is starting to gain steam, although mainly through the term "real-time Web." A couple of the Comet folks posted at the same time, both talking about the technology in different ways.</p>
<p>Ted Goddard answered a bunch of questions in <a href="http://www.jroller.com/tedgoddard/entry/websocket_is_neither_web_nor">WebSocket is neither Web nor Socket</a>.</p>
<ul>
<li>Does WebSocket use TCP ports 81 and 815?</li>
<li>How does WebSocket make use of an HTTP connection on port 80?</li>
<li>Does WebSocket obey the same origin policy?</li>
<li>Is WebSocket restricted to the two-connection limit of HTTP?</li>
<li>Can WebSocket read and write arbitrarily as with low-level socket APIs?</li>
<li>How does WebSocket delineate messages?</li>
<li>How are function call semantics implemented over WebSocket?</li>
<li>Is WebSocket easy to implement?</li>
<li>Can we just upgrade HTTP?</li>
</ul>
<p>Michael Carter had a fun little spin on things in <a href="http://svwebbuilder.wordpress.com/2008/10/20/html5-websocket-and-webjneering/">HTML5 WebSocket and WebJneering</a>.</p>
<blockquote><p>
I want to tell you about HTML5, specifically about the advances in bi-directional, asynchronous communication. But I’m troubled. Consider two propositions that I didn’t come up with: 1) Nothing is new, 2) Everything Sucks. Let these simple truths cast a shadow upon the tale you are about to read…</p>
<p>HTML5 provides a new thing called a WebSocket. I’m pretty sad that its not a TCPSocket, but alas, it was easier to throw in a handshake for security than to set up some out-of-bound security method, such as flash’s cross-domain policy files. We can’t connect to existing TCP servers, so we’ll just have to start over and write new WS/TCP servers. No problem. WebSocket will still be our salvation, leading us towards our stateful future.</p>
<p>I was at first overjoyed at the prospect of the World Wide Web’s new status as a real boy. But such feelings were just a precursor to the greatest technology-driven depression of my life. You see, as recently as twenty years ago the world was brimming with real programmers, who knew how to do such amazing things as write programs that conversed with far-away computers by using bsd sockets. We’ve traded those programmers, by and large, for JavaScript kiddies. Its not that the real programmers all died, retired, or gave up with programming; rather, every new programmer of the past decade is a bright-eyed 22 year old who thinks he’s the best thing since Google, what with his domination of rails (, java, or php) and javascript.
</p></blockquote>
<p>Both Michael and Ted will be joining myself, Alex Russell, Dylan, John Fallows, and others at an event <a href="http://www.svwebbuilder.com/page/10%2F29%2F2008+The+Chronicles+of+Web+Standard%3A+the+HTML+5%2C+the+Comet+and+the+WebSocket?t=anon">tonight in Mountain View covering Comet</a>. If you are in town, join us!</p>
<p>We are using the Google Moderator to help answer questions you want heard, so<br />
<a href="http://tr.im/svwb_oct08">add your questions too</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/web-sockets-comet-and-a-panel/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>A Million-user Comet Application with Mochiweb</title>
		<link>http://ajaxian.com/archives/mochiweb-comet</link>
		<comments>http://ajaxian.com/archives/mochiweb-comet#comments</comments>
		<pubDate>Fri, 17 Oct 2008 11:26:05 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4804</guid>
		<description><![CDATA[Richard Jones has started an interesting series to talk about scaling comet web applications using MochiWeb: In this series I will detail what I found out empirically about how mochiweb performs with lots of open connections, and show how to build a comet application using mochiweb, where each mochiweb connection is registered with a router <a href="http://ajaxian.com/archives/mochiweb-comet">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Richard Jones has started an interesting series to talk about scaling comet web applications using MochiWeb:</p>
<blockquote>
<p>In this series I will detail what I found out empirically about how mochiweb performs with lots of open connections, and show how to build a comet application using mochiweb, where each mochiweb connection is registered with a router which dispatches messages to various users. We end up with a working application that can cope with a million concurrent connections, and crucially, knowing how much RAM we need to make it work. </p>
<p>In part one:</p>
<ul>
<li>Build a basic comet mochiweb app that sends clients a message every 10 seconds.</li>
<li>Tune the Linux kernel to handle lots of TCP connections</li>
<li>Build a flood-testing tool to open lots of connections (ye olde C10k test)</li>
<li>Examine how much memory this requires per connection.</li>
</ul>
<p>Future posts in this series will cover how to build a real message routing system, additional tricks to reduce memory usage, and more testing with 100k and 1m concurrent connections. </p>
</blockquote>
<p>Richard walks through the code and setup, step by step and measures the scalable performance, leading too:</p>
<blockquote><p>
That was a reasonable first attempt. 45KB per-connection seems a bit high - I could probably cook something up in C using libevent that could do this with closer to 4.5KB per connection (just a guess, if anyone has experience please leave a comment). If you factor in the amount of code and time it took to do this in Erlang compared with C, I think the increased memory usage is more excusable.</p>
<p>In future posts I’ll cover building a message router (so we can uncomment lines 25 and 41-43 in mochiconntest_web.erl) and talk about some ways to reduce the overall memory usage. I’ll also share the results of testing with 100k and 1M connections.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/mochiweb-comet/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>js.io: client library for networking</title>
		<link>http://ajaxian.com/archives/jsio-client-library-for-networking</link>
		<comments>http://ajaxian.com/archives/jsio-client-library-for-networking#comments</comments>
		<pubDate>Mon, 06 Oct 2008 12:01:31 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4682</guid>
		<description><![CDATA[Michael Carter et al have been working on js.io, a client library that gives you networking, including Comet like support, via JavaScript. The low level work can sit upon Comet APIs, and in the future, Web Sockets, and you get high level APIs to protocols such as: amqp imap irc ldap smtp ssh stomp telnet <a href="http://ajaxian.com/archives/jsio-client-library-for-networking">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://js.io/js.io.png" style="float: right; padding: 8px;" /></p>
<p>Michael Carter et al have been working on <a href="http://js.io/">js.io</a>, a client library that gives you networking, including Comet like support, via JavaScript.</p>
<p>The low level work can sit upon Comet APIs, and in the future, Web Sockets, and you get high level APIs to protocols such as:</p>
<ul>
<li>amqp</li>
<li>imap</li>
<li>irc</li>
<li>ldap</li>
<li>smtp</li>
<li>ssh</li>
<li>stomp</li>
<li>telnet</li>
<li>xmpp</li>
</ul>
<p>There are some demos such as <a href="http://orbited.org/wiki/LiveHelp">LiveHelp</a> that uses Orbited as the backend.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jsio-client-library-for-networking/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ZK 3.5 Released with Comet Support</title>
		<link>http://ajaxian.com/archives/zk-35-released-with-comet-support</link>
		<comments>http://ajaxian.com/archives/zk-35-released-with-comet-support#comments</comments>
		<pubDate>Thu, 18 Sep 2008 20:31:05 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[ZK]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4539</guid>
		<description><![CDATA[ZK 3.5, the latest version of the server-side Ajax framework, is out with a raft of new features. Three of those features really stand out for me: Comet server push Customization of look and feel Performance monitoring Server push via polling has been available in ZK for a while, and Comet in the ZK "Enterprise <a href="http://ajaxian.com/archives/zk-35-released-with-comet-support">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>ZK 3.5, the latest version of the server-side Ajax framework, is out with a <a href="http://zkoss.org/smalltalks/zk3.5/" target="_blank">raft of new features</a>. Three of those features really stand out for me:</p>
<ul>
<li>Comet server push</li>
<li>Customization of look and feel</li>
<li>Performance monitoring</li>
</ul>
<p>Server push via polling has been available in ZK for a while, and Comet in the ZK "Enterprise Edition," but now it is available to everyone. And it is pretty easy to use: "The implementation of server push is transparent to developers.  ZK chooses which implementation to use according to the edition of ZK automatically, but it is configurable."</p>
<p>Customization of look and feel has gotten much easier. ZK has followed the example of a number of other frameworks in styling its widgets with predictably named CSS styles. Changing the look and feel of an application is now as easy as changing the ZK widget style sheet. Styles can further be overridden on a widget <a href="http://zkoss.org/smalltalks/zk3.5/#all" target="_blank">instance-by-instance basis</a>.</p>
<p>Performance monitoring is perhaps the most exciting new feature. Client-side tools such as <a href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a> can guide optimization efforts and give you point in time performance snapshots. But critical applications need to be monitored and tracked end to end over their lifespan. With ZK 3.5, you now have the plumbing to instrument your application to capture five data points for each request:</p>
<ul>
<li>T1, the time browser sends a request to server</li>
<li>T2, the time server receives a request</li>
<li>T3, the time server sends a request to browser</li>
<li>T4, the time browser receives a request from server</li>
<li>T5, the time the browser finishes processing a request</li>
</ul>
<p><strong>ZKStudio 0.8.2</strong></p>
<p>There's also a <a href="http://www.zkoss.org/smalltalks/zkstudioins/" target="_blank">new version of ZKStudio</a> for Eclipse out. The major change is that it now supports auto update via <a href="http://studioupdate.zkoss.org/studio/update">http://studioupdate.zkoss.org/studio/update</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/zk-35-released-with-comet-support/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

