Files
cosmopolite/index.html

73 lines
3.3 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>Cosmopolite</title>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
</head>
<body>
<div class="wrapper">
<header>
<h1 class="header">Cosmopolite</h1>
<p class="header">Client/server publish/subscribe, presence and key/value storage for AppEngine</p>
<ul>
<li class="download"><a class="buttons" href="https://github.com/flamingcowtv/cosmopolite/zipball/master">Download ZIP</a></li>
<li class="download"><a class="buttons" href="https://github.com/flamingcowtv/cosmopolite/tarball/master">Download TAR</a></li>
<li><a class="buttons github" href="https://github.com/flamingcowtv/cosmopolite">View On GitHub</a></li>
</ul>
</header>
<section>
<h1>
<a name="cosmopolite" class="anchor" href="#cosmopolite"><span class="octicon octicon-link"></span></a>Cosmopolite</h1>
<p>Client/server publish/subscribe, presence and key/value storage for <a href="https://developers.google.com/appengine/">AppEngine</a>.</p>
<h3>Dig in</h3>
<ul>
<li style="font-weight: bold;">Try out <a href="https://playground.cosmopolite.org/">the playground</a></li>
<li style="font-weight: bold;">Read <a href="overview">the overview</a></li>
<li style="font-weight: bold;">Read <a href="tutorial">the tutorial</a></li>
<li style="font-weight: bold;">Read <a href="reference">the reference</a></li>
</ul>
<h3>Components</h3>
<ul>
<li>A server API built on the <a href="https://developers.google.com/appengine/docs/python/">AppEngine Python framework</a>.</li>
<li>A browser client library written in JavaScript.</li>
</ul>
<h3>Feature overview</h3>
<ul>
<li>Near-realtime notification to subscribers of messages published to a "subject"</li>
<li>Server-side storage of past messages for replay later to clients</li>
<li>Ephemeral messages tied to client connection that can be used for presence information</li>
<li>Client identification persistence via <a href="http://www.w3schools.com/html/html5_webstorage.asp">localStorage</a> tokens or in combination with <a href="https://developers.google.com/appengine/docs/python/users/">Google account signin</a></li>
<li>Complex messages supported via transparent <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON">JSON</a> serialization</li>
<li>Server-side strict ordering of messages</li>
<li>Client-side message queueing in localStorage and resumption on restart</li>
<li>Message duplication detection and elimination</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a> support for notification of client -&gt; server operation completion</li>
</ul>
</section>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-37845853-2', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>