XMPP-based Push Solutions - pubsub.p1pp.net XMPP, HTTP and how to use ProcessOne Push Platform February 2012
May 11, 2015
XMPP-based Push Solutions - pubsub.p1pp.netXMPP, HTTP and how to use ProcessOne Push Platform
February 2012
Violet use case: Nabaztag push architecture
Initial architecture based onpure polling to check «inbox»
Based on database and HTTP front servers
Database with rabbits'messages
Data publication
BroadcastserviceHTTP Fronts
Query to check inbox(every 5 seconds)
Violet use case: Nabaztag push architecture
New push architecture on XMPP
Lower latency and more reliable delivery
HTTP infrastructure could be halfed
Database storing therabbits' inbox
Publishing data
broadcastservice
ejabberd servers
Persistant XMPPconnection
Messages are pushedwhen needed
History of data
Example: Gitlive
This is our technological demo showing in browser, anonymous pubsub.
Example: The Upik case
Posting blog post on web server(triggers a hub "ping")
PubsubhubbubHub
for subscribers
XMPP servers
Persistant XMPPconnection
Messages are pushedwhen needed
PubsubhubbubHub
for publisher
Could be the samehub
Enabling all those cases with ProcessOne Push Platform (P1PP)
Build a generic platform able to manage all those cases for our users in a
standard way.
Build a development community around realtime protocols.
Share our XMPP pubsub expertise with developers around the world.
Propose our ability to make XMPP Pubsub scale as a service.
Support innovation around notification and new usage:
Mobile.
Web protocols: websockets.
ProcessOne Push Platform (P1PP) - Overview
Browser Desktop ormobile client
P1 Push Platform
XMPP overHTTP /
Websocket
XMPP overTCP - s2s
XMPP server(Gtalk for example)
XMPP overTCP - c2s
Publisher
XMPP (throughout 3rd party server)or
HTTP publish protocol
Resources
Main P1PP page:http://www.process-one.net/en/solutions/p1pp
Developer page:http://www.process-one.net/en/solutions/p1pp_dev
Github ProcessOne:https://github.com/organizations/processone
P1PP Javascript library on Github:https://github.com/processone/p1pp-js
P1PP Command-line tool on Github:https://github.com/processone/p1pp
XMPP protocol level documentationhttps://support.process-one.net/doc/display/XMPP/P1PP+documentation
Command-line
./bin/p1.rb create test12
./bin/p1.rb list
./bin/p1.rb delete
./bin/p1.rb subscribe test12
./bin/p1.rb unsubscribe test12
./bin/p1.rb listenecho ‘test’ | ./bin/p1.rb publish test12
Javascript examples: sending
https://github.com/processone/p1pp-js/blob/master/examples/ticker/sender.html<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.js'></script>
<script src="../../p1pp.js"></script> <script type="text/javascript"> $(function() { $("#connect").click(function() { connect($("#password").val()) })
$("#update").click(function() { var el = Strophe.xmlElement("value"); el.appendChild(Strophe.xmlTextNode($("#newContent").val()));
P1PP.publish("ticker", null, el, function() { });
$("#newContent").val(""); }) });
function connect(password) { P1PP.connect({ jid: "[email protected]", password: password, debug: false, // Change to true to see messages trafic on_strophe_event: on_state_change }); }
Javascript examples: Receving<script src="../../p1pp.js"></script>
<script type="text/javascript"> $(function() { P1PP.connect({ debug: false, "// Change to true to see messages trafic nodes: ["[email protected]/ticker"], publish: on_publish, retract: on_retract, on_strophe_event: on_state_change }); $("#ticker").liScroll(); });
function on_state_change(state, c){ if(state === Strophe.Status.CONNECTED || state === Strophe.Status.ATTACHED) { } }
function on_publish(id, value, node, timestamp) { $("#ticker").stop(); $("#ticker").append("<li id='"+id+"'><span>"+$(value).text()+"</span></li>"); $("#ticker").liScrollRestart(); }
function on_retract() { } </script>
Online
http://dev1.process-one.net/~pchmielowski/ticker/ticker3.html
http://dev1.process-one.net/~pchmielowski/ticker/sender.html