71 lines
3.4 KiB
HTML
71 lines
3.4 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
|
<title>Cosmopolite by flamingcowtv</title>
|
|
|
|
<link rel="stylesheet" href="stylesheets/styles.css">
|
|
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
|
|
<script src="javascripts/scale.fix.js"></script>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
</head>
|
|
<body>
|
|
<div class="wrapper">
|
|
<header>
|
|
<h1 class="header">Cosmopolite</h1>
|
|
<p class="header">Client/server publish/subscribe 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 and key/value storage for <a href="https://developers.google.com/appengine/">AppEngine</a>.</p>
|
|
|
|
<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>Support for associating a key with a message and for lookup of the most recent message for a given key</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 -> server operation completion</li>
|
|
</ul>
|
|
</section>
|
|
</div>
|
|
<!--[if !IE]><script>fixScale(document);</script><![endif]-->
|
|
<script type="text/javascript">
|
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
|
</script>
|
|
<script type="text/javascript">
|
|
try {
|
|
var pageTracker = _gat._getTracker("UA-37845853-2");
|
|
pageTracker._trackPageview();
|
|
} catch(err) {}
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|