Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 history little known fact then it got refactored in to “portal” as one message goes in, and comes out on the other side.
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 history little known fact then I released that this project has way to much potential to be just another feature in a framework
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 stars, but growing steady star it on http://github.com/primus/primus 553 5 developers with commit access make 2 great pull requests, and you’ll get full github access forks which i regularly check for commits that people “forget” to contribute 43
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 the community #primus on irc.freenode.net all other questions are currently posted in the github issue tracker
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 learning primus ! !<br/>'use strict';!<br/>!<br/>var primus = new Primus("http://localhost:8080");!<br/>!<br/>primus.on("open", function connected() {!<br/>console.log("connection opened");!<br/>primus.write("ohai");!<br/>});!<br/>!<br/>primus.on("data", function data(msg) {!<br/>console.log(“received", msg);!<br/>});!<br/> CODE EXAMPLE: PRIMUS CLIENT
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 stream compatible .pipe() or message streams no need to learn a new API, you already know this
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 1 line of code to switch real-time libraries no more rewrites required, automatically compiles the client
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 1 line of code var primus = new Primus(server, { ! transformer: “sockjs" // engine.io, socket.io etc! }); CODE EXAMPLE: PRIMUS SERVER
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 module.exports = require(“primus/transformer").extend({! server: function () {! // This is only exposed and ran on the server.! },! ! client: function () {! // This is stringified end send/stored in the client.! // Can be ran on the server, if used through Node.js! },! ! // Optional library for the front-end, assumes globals! library: fs.readFileSync(__dirname +"./yourclientlib.js")! }); CODE EXAMPLE: PRIMUS SERVER 1 line of code
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 supported frameworks socket.io multiple transports cross domain invested with bugs poorly / not maintained / left for dead no message order guarantee dies behind firewall/virusscanners
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 supported frameworks browserchannel multiple transports client maintained by google message order guaranteed works behind firewalls & virusscanners not cross domain no websocket support coffeescript on the server ._.
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 supported frameworks websockets (ws) super damned fast supports binary cross domain i’m the only somewhat maintainer no fallbacks or downgrading broken by firewalls/virusscanners
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 supported frameworks there are some minor inconsistencies small, but important to know
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 custom encoders var primus = new Primus(server, { ! parser: "EJSON" // or binary-pack or a third party module! }); CODE EXAMPLE: PRIMUS SERVER
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 module.exports = {! encoder: function (data, fn) {! // encode data to a string.! },! ! decoder: function (data, fn) {! // decode data to an object! },! ! // Optional library for the front-end, assumes globals! library: fs.readFileSync(__dirname +"./yourclientlib.js")! }; CODE EXAMPLE: PRIMUS SERVER custom encoders
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 custom encoders primus.transform('incoming', function (packet) {! // This would transform all incoming messages to foo;! packet.data = 'foo';! });! ! primus.transform('outgoing', function (packet) {! // This would transform all outgoing messages to foo;! packet.data = 'foo';! }); CODE EXAMPLE: PRIMUS SERVER & CLIENT message transformers
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 broadcast primus.write("message"); // send message to all users! ! primus.forEach(function (spark) {! // Or iterate over all connections, select the once you! // want and only write to those! ! spark.write("message");! }); CODE EXAMPLE: PRIMUS SERVER
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 client works on node var primus = new Primus(server)! , Socket = primus.Socket;! ! var client = new Socket(“http://localhost:8080”);! ! // or if you want to connect to a remote server:! var primus = require(“primus”).createSocket({/* options */}); CODE EXAMPLE: PRIMUS SERVER
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 plugins // The long awaited Socket.IO 1.0 release with Primus:! ! var server = require("http").createServer(fn)! , primus = new Primus(server, { transformer:"engine.io" });! ! primus.use(“emitter","primus-emitter")! .use(“multiplex”, require(“primus-multiplex”))! .use(“primus-emitter”, "primus-rooms"); CODE EXAMPLE: PRIMUS SERVER
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 module.exports = {! server: function () {! // This is only exposed and ran on the server.! },! ! client: function () {! // This is stringified end send/stored in the client.! // Can be ran on the server, if used through Node.js! },! ! // Optional library for the front-end, assumes globals! library: fs.readFileSync(__dirname +"./yourclientlib.js")! }; CODE EXAMPLE: PRIMUS SERVER plugins
Arnout Kazemier, founder 3rd-Eden & Observe.it nodejsconf.it 2014 much much more client works in node.js without changes authorization handling ip address resolving even behind proxies pathname exposure library generation smart server closing which boots connections full header access access to raw package data event based logger