SlideShare a Scribd company logo
1 of 64
Download to read offline
NullMQ
 ZEROMQ SEMANTICS IN THE BROWSER




Jeff Lindsay      Bulat Shakirzyanov
@progrium             @avalanche123
libzmq
High-level patterns

      libzmq
Philosophy

High-level patterns

      libzmq
Philosophy

High-level patterns




      libzmq
Philosophy

High-level patterns

 API / Semantics

      libzmq
Toolkit for building messaging systems...
Toolkit for building messaging systems...
        ...behind your firewall
Toolkit for building messaging systems...
        ...behind your firewall
        ...not for customers
Toolkit for building messaging systems...
        ...behind your firewall
        ...not for customers
        ...certainly not with the browser
WITH VOICE

  MAKE & RECEIVE
  PHONE CALLS


  SEND & RECEIVE
  TEXT MESSAGES


  INSTANTLY BUY
  PHONE NUMBERS


  ADD VOICE TO
  WEB & MOBILE APPS
Browser   Browser
ZeroMQ in the
    browser?
ZeroMQ in the
    browser?
   • libzmq is a C++ library
ZeroMQ in the
    browser?
   • libzmq is a C++ library
   • Browser extension not viable
ZeroMQ in the
    browser?
   • libzmq is a C++ library
   • Browser extension not viable
   • ZMTP is not valuable by itself
Let’s say we did...
Let’s say we did...
 • Security?
Let’s say we did...
 • Security?
  • Skip existing auth infrastructure
Let’s say we did...
 • Security?
  • Skip existing auth infrastructure
  • Need to make something up
Let’s say we did...
 • Security?
  • Skip existing auth infrastructure
  • Need to make something up
 • Direct connections?
Let’s say we did...
 • Security?
  • Skip existing auth infrastructure
  • Need to make something up
 • Direct connections?
  • Lots of open connections, open ports
Let’s say we did...
 • Security?
  • Skip existing auth infrastructure
  • Need to make something up
 • Direct connections?
  • Lots of open connections, open ports
 • Just not “web friendly”
Philosophy

High-level patterns

 API / Semantics

      libzmq
Philosophy

High-level patterns

 API / Semantics

      libzmq
What do we want?
What do we want?
•   Near feature/semantic parity with ZeroMQ
What do we want?
•   Near feature/semantic parity with ZeroMQ

•   Throughput performance not as important
What do we want?
•   Near feature/semantic parity with ZeroMQ

•   Throughput performance not as important

•   Embrace nature of the web in design
What do we want?
•   Near feature/semantic parity with ZeroMQ

•   Throughput performance not as important

•   Embrace nature of the web in design

•   Single connection, service multiplexing
What do we want?
•   Near feature/semantic parity with ZeroMQ

•   Throughput performance not as important

•   Embrace nature of the web in design

•   Single connection, service multiplexing

•   Use existing transports, protocols, etc
NullMQ
      What do we want?
•   Near feature/semantic parity with ZeroMQ

•   Throughput performance not as important

•   Embrace nature of the web in design

•   Single connection, service multiplexing

•   Use existing transports, protocols, etc
What do we have?
WebSocket
WebSocket
•   ZMTP over WebSocket?
WebSocket
•   ZMTP over WebSocket?

    •   Connection inefficient
WebSocket
•   ZMTP over WebSocket?

    •   Connection inefficient

    •   Not extensible
WebSocket
•   ZMTP over WebSocket?

    •   Connection inefficient

    •   Not extensible

    •   No easy parsers
WebSocket
WebSocket
•   STOMP over WebSocket?
WebSocket
•   STOMP over WebSocket?

    •   Existing parsers, easy to write
WebSocket
•   STOMP over WebSocket?

    •   Existing parsers, easy to write

    •   Very much like HTTP
WebSocket
•   STOMP over WebSocket?

    •   Existing parsers, easy to write

    •   Very much like HTTP

    •   Used primarily to multiplex
NullMQ
var url = "ws://hostname/gateway";
var ctx = new nullmq.Context(url);
socket = ctx.socket(nullmq.REP);
socket.bind("nullmq://echo");
socket.recvall(function(request) {
    socket.send("Got: "+request);
});
var url = "ws://hostname/gateway";
var ctx = new nullmq.Context(url);
socket = ctx.socket(nullmq.REQ);
socket.connect("nullmq://echo");
socket.send("Hello world!");
socket.recv(function(reply) {
    console.log(reply);
    // "Got: Hello world!"
});
Browser         Server

Application      Application

     NullMQ     NullMQ

     STOMP      STOMP

   WebSocket   WebSocket
Browser      Gateway     Backend

Application    Bridge     ZMQ Socket

 NullMQ        NullMQ     ZMQ Socket

 STOMP         STOMP      ZMQ Socket

WebSocket     WebSocket
Presence Demo
NullMQ
 http://github.com/progrium/nullmq
http://groups.google.com/group/nullmq

           @progrium
         @avalanche123
STOMP
STOMP
•   Simple and human-readable like HTTP
STOMP
•   Simple and human-readable like HTTP

•   Extensible via headers
STOMP
•   Simple and human-readable like HTTP

•   Extensible via headers

•   Library and server support
STOMP
•   Simple and human-readable like HTTP

•   Extensible via headers

•   Library and server support

•   An easy WebSocket subprotocol
STOMP
•   Simple and human-readable like HTTP

•   Extensible via headers

•   Library and server support

•   An easy WebSocket subprotocol

•   Can be used to model “virtual connections”
STOMP
•   Simple and human-readable like HTTP

•   Extensible via headers

•   Library and server support

•   An easy WebSocket subprotocol

•   Can be used to model “virtual connections”

•   Transactions for multipart messages
STOMP “Extensions”

1. Frames include socket type header
2. Header for “connect” or “bind” in SUBSCRIBE
3. Req-Rep messages use “reply-to” header

More Related Content

What's hot

Scala and ZeroMQ: Events beyond the JVM
Scala and ZeroMQ: Events beyond the JVMScala and ZeroMQ: Events beyond the JVM
Scala and ZeroMQ: Events beyond the JVMRUDDER
 
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)James Titcumb
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQAll Things Open
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepthWee Keat Chin
 
Rabbit mq, amqp and php
Rabbit mq, amqp and phpRabbit mq, amqp and php
Rabbit mq, amqp and phprodeob
 
XMPP & AMQP
XMPP & AMQPXMPP & AMQP
XMPP & AMQPvoluntas
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQJames Carr
 
XMPP & AMQP in Ruby
XMPP & AMQP in RubyXMPP & AMQP in Ruby
XMPP & AMQP in RubyMatt Todd
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQAlvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQTanya Denisyuk
 
The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP Eberhard Wolff
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)Ericom Software
 
gen_udp and gen_tcp in Elixir
gen_udp and gen_tcp in Elixirgen_udp and gen_tcp in Elixir
gen_udp and gen_tcp in ElixirTomáš Koutský
 

What's hot (20)

Scala and ZeroMQ: Events beyond the JVM
Scala and ZeroMQ: Events beyond the JVMScala and ZeroMQ: Events beyond the JVM
Scala and ZeroMQ: Events beyond the JVM
 
Zero mq logs
Zero mq logsZero mq logs
Zero mq logs
 
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)
Practical Message Queuing Using RabbitMQ (PHPem, 3rd July 2014)
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
 
Rabbit MQ
Rabbit MQRabbit MQ
Rabbit MQ
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepth
 
Rabbit mq, amqp and php
Rabbit mq, amqp and phpRabbit mq, amqp and php
Rabbit mq, amqp and php
 
XMPP & AMQP
XMPP & AMQPXMPP & AMQP
XMPP & AMQP
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
 
AMQP with RabbitMQ
AMQP with RabbitMQAMQP with RabbitMQ
AMQP with RabbitMQ
 
RabbitMQ
RabbitMQRabbitMQ
RabbitMQ
 
XMPP & AMQP in Ruby
XMPP & AMQP in RubyXMPP & AMQP in Ruby
XMPP & AMQP in Ruby
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQAlvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
 
The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
 
Think beyond http
Think beyond httpThink beyond http
Think beyond http
 
RabbitMQ and AMQP Model
RabbitMQ and AMQP ModelRabbitMQ and AMQP Model
RabbitMQ and AMQP Model
 
RabbitMQ & Hutch
RabbitMQ & HutchRabbitMQ & Hutch
RabbitMQ & Hutch
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
 
gen_udp and gen_tcp in Elixir
gen_udp and gen_tcp in Elixirgen_udp and gen_tcp in Elixir
gen_udp and gen_tcp in Elixir
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 

Viewers also liked

ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The AnswerIan Barber
 
Create a Future Education Model - K-Graduate Programs
Create a Future Education Model - K-Graduate ProgramsCreate a Future Education Model - K-Graduate Programs
Create a Future Education Model - K-Graduate ProgramsWorldFuture2015
 
Introducción al m-learning
Introducción al m-learningIntroducción al m-learning
Introducción al m-learningaCanelma
 
Diana rojas astrofoto cp
Diana rojas   astrofoto cpDiana rojas   astrofoto cp
Diana rojas astrofoto cpcampus party
 
Presentacion generalintia englishweb
Presentacion generalintia englishwebPresentacion generalintia englishweb
Presentacion generalintia englishwebslintiasa
 
Guia dejar fumar
Guia dejar fumarGuia dejar fumar
Guia dejar fumarAna Martín
 
PresentacióN Comercial Intelligent Tech
PresentacióN Comercial Intelligent TechPresentacióN Comercial Intelligent Tech
PresentacióN Comercial Intelligent Techpmartinoli
 
Hellmann Worldwide Logistics Image Presentation 2011 englisch
Hellmann Worldwide Logistics Image Presentation 2011 englischHellmann Worldwide Logistics Image Presentation 2011 englisch
Hellmann Worldwide Logistics Image Presentation 2011 englischHellmannLogistics
 
Amigo Duende Sponsorship Proposal - Official
Amigo Duende Sponsorship Proposal  - OfficialAmigo Duende Sponsorship Proposal  - Official
Amigo Duende Sponsorship Proposal - Officialrevolucionlatina
 
Bridging Cultures "Entenderse es más que hablar"
Bridging Cultures "Entenderse es más que hablar"Bridging Cultures "Entenderse es más que hablar"
Bridging Cultures "Entenderse es más que hablar"Macarena Alvarez Kelly
 
Digital storytelling en el aula de Primaria y Secundaria
Digital storytelling en el aula de Primaria y SecundariaDigital storytelling en el aula de Primaria y Secundaria
Digital storytelling en el aula de Primaria y SecundariaAlberto G.
 
Biotecno enzimas[1]1
Biotecno enzimas[1]1Biotecno enzimas[1]1
Biotecno enzimas[1]1ragurtol
 

Viewers also liked (20)

ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
 
ZeroMQ with NodeJS
ZeroMQ with NodeJSZeroMQ with NodeJS
ZeroMQ with NodeJS
 
Tekniske specifikationer VIEW
Tekniske specifikationer VIEWTekniske specifikationer VIEW
Tekniske specifikationer VIEW
 
Create a Future Education Model - K-Graduate Programs
Create a Future Education Model - K-Graduate ProgramsCreate a Future Education Model - K-Graduate Programs
Create a Future Education Model - K-Graduate Programs
 
Dilo 04 web
Dilo 04 webDilo 04 web
Dilo 04 web
 
Notas Tricaster
Notas TricasterNotas Tricaster
Notas Tricaster
 
Introducción al m-learning
Introducción al m-learningIntroducción al m-learning
Introducción al m-learning
 
Diana rojas astrofoto cp
Diana rojas   astrofoto cpDiana rojas   astrofoto cp
Diana rojas astrofoto cp
 
Presentacion generalintia englishweb
Presentacion generalintia englishwebPresentacion generalintia englishweb
Presentacion generalintia englishweb
 
Guia dejar fumar
Guia dejar fumarGuia dejar fumar
Guia dejar fumar
 
La Electrónica
La Electrónica La Electrónica
La Electrónica
 
PresentacióN Comercial Intelligent Tech
PresentacióN Comercial Intelligent TechPresentacióN Comercial Intelligent Tech
PresentacióN Comercial Intelligent Tech
 
Hellmann Worldwide Logistics Image Presentation 2011 englisch
Hellmann Worldwide Logistics Image Presentation 2011 englischHellmann Worldwide Logistics Image Presentation 2011 englisch
Hellmann Worldwide Logistics Image Presentation 2011 englisch
 
Amigo Duende Sponsorship Proposal - Official
Amigo Duende Sponsorship Proposal  - OfficialAmigo Duende Sponsorship Proposal  - Official
Amigo Duende Sponsorship Proposal - Official
 
Presentation B2B Galaxy
Presentation B2B GalaxyPresentation B2B Galaxy
Presentation B2B Galaxy
 
Bridging Cultures "Entenderse es más que hablar"
Bridging Cultures "Entenderse es más que hablar"Bridging Cultures "Entenderse es más que hablar"
Bridging Cultures "Entenderse es más que hablar"
 
Inducción agm 2015
Inducción agm 2015Inducción agm 2015
Inducción agm 2015
 
Finn brochure istituzionale
Finn brochure istituzionaleFinn brochure istituzionale
Finn brochure istituzionale
 
Digital storytelling en el aula de Primaria y Secundaria
Digital storytelling en el aula de Primaria y SecundariaDigital storytelling en el aula de Primaria y Secundaria
Digital storytelling en el aula de Primaria y Secundaria
 
Biotecno enzimas[1]1
Biotecno enzimas[1]1Biotecno enzimas[1]1
Biotecno enzimas[1]1
 

Similar to NullMQ @ PDX

Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swaggerTony Tam
 
A web app in pure Clojure
A web app in pure ClojureA web app in pure Clojure
A web app in pure ClojureDane Schneider
 
Build your own analytics power tools
Build your own analytics power toolsBuild your own analytics power tools
Build your own analytics power toolsAlban Gérôme
 
Html5 web sockets - Brad Drysdale - London Web 2011-10-20
Html5 web sockets - Brad Drysdale - London Web 2011-10-20Html5 web sockets - Brad Drysdale - London Web 2011-10-20
Html5 web sockets - Brad Drysdale - London Web 2011-10-20Nathan O'Hanlon
 
My Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicMy Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicApollo Clark
 
Message:Passing - lpw 2012
Message:Passing - lpw 2012Message:Passing - lpw 2012
Message:Passing - lpw 2012Tomas Doran
 
Prometheus lightning talk (Devops Dublin March 2015)
Prometheus lightning talk (Devops Dublin March 2015)Prometheus lightning talk (Devops Dublin March 2015)
Prometheus lightning talk (Devops Dublin March 2015)Brian Brazil
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021Lorenzo Miniero
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkFabio Tiriticco
 
Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)Igalia
 
Increasing velocity via serless semantics
Increasing velocity via serless semanticsIncreasing velocity via serless semantics
Increasing velocity via serless semanticsKfir Bloch
 
Kubernetes and AWS Lambda can play nicely together
Kubernetes and AWS Lambda can play nicely togetherKubernetes and AWS Lambda can play nicely together
Kubernetes and AWS Lambda can play nicely togetherEdward Wilde
 
Messaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new frameworkMessaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new frameworkTomas Doran
 
DefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayCarmine Paolino
 
Web sockets - Pentesting
Web sockets - Pentesting Web sockets - Pentesting
Web sockets - Pentesting Vandana Verma
 
Kuby, ActiveDeployment for Rails Apps
Kuby, ActiveDeployment for Rails AppsKuby, ActiveDeployment for Rails Apps
Kuby, ActiveDeployment for Rails AppsCameron Dutro
 
Week01 jan19 introductionto_php
Week01 jan19 introductionto_phpWeek01 jan19 introductionto_php
Week01 jan19 introductionto_phpJeanho Chu
 

Similar to NullMQ @ PDX (20)

Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
 
About Clack
About ClackAbout Clack
About Clack
 
A web app in pure Clojure
A web app in pure ClojureA web app in pure Clojure
A web app in pure Clojure
 
Build your own analytics power tools
Build your own analytics power toolsBuild your own analytics power tools
Build your own analytics power tools
 
Html5 web sockets - Brad Drysdale - London Web 2011-10-20
Html5 web sockets - Brad Drysdale - London Web 2011-10-20Html5 web sockets - Brad Drysdale - London Web 2011-10-20
Html5 web sockets - Brad Drysdale - London Web 2011-10-20
 
My Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicMy Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is Magic
 
Message:Passing - lpw 2012
Message:Passing - lpw 2012Message:Passing - lpw 2012
Message:Passing - lpw 2012
 
Prometheus lightning talk (Devops Dublin March 2015)
Prometheus lightning talk (Devops Dublin March 2015)Prometheus lightning talk (Devops Dublin March 2015)
Prometheus lightning talk (Devops Dublin March 2015)
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
 
Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)
 
Increasing velocity via serless semantics
Increasing velocity via serless semanticsIncreasing velocity via serless semantics
Increasing velocity via serless semantics
 
Realtime web2012
Realtime web2012Realtime web2012
Realtime web2012
 
Kubernetes and AWS Lambda can play nicely together
Kubernetes and AWS Lambda can play nicely togetherKubernetes and AWS Lambda can play nicely together
Kubernetes and AWS Lambda can play nicely together
 
Messaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new frameworkMessaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new framework
 
DefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysis
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per Day
 
Web sockets - Pentesting
Web sockets - Pentesting Web sockets - Pentesting
Web sockets - Pentesting
 
Kuby, ActiveDeployment for Rails Apps
Kuby, ActiveDeployment for Rails AppsKuby, ActiveDeployment for Rails Apps
Kuby, ActiveDeployment for Rails Apps
 
Week01 jan19 introductionto_php
Week01 jan19 introductionto_phpWeek01 jan19 introductionto_php
Week01 jan19 introductionto_php
 

More from Jeff Lindsay

Hack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkHack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkJeff Lindsay
 
Building an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactBuilding an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactJeff Lindsay
 
Evented Web @ Ignite
Evented Web @ IgniteEvented Web @ Ignite
Evented Web @ IgniteJeff Lindsay
 
Hacker Dojo Origins
Hacker Dojo OriginsHacker Dojo Origins
Hacker Dojo OriginsJeff Lindsay
 
APIs That Make Things Happen
APIs That Make Things HappenAPIs That Make Things Happen
APIs That Make Things HappenJeff Lindsay
 
WebHooks in 10 Minutes
WebHooks in 10 MinutesWebHooks in 10 Minutes
WebHooks in 10 MinutesJeff Lindsay
 
Hacker Dojo @ Google
Hacker Dojo @ GoogleHacker Dojo @ Google
Hacker Dojo @ GoogleJeff Lindsay
 
How WebHooks Will Make Us All Programmers
How WebHooks Will Make Us All ProgrammersHow WebHooks Will Make Us All Programmers
How WebHooks Will Make Us All ProgrammersJeff Lindsay
 
Creating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityCreating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityJeff Lindsay
 
Dissolving Problems
Dissolving ProblemsDissolving Problems
Dissolving ProblemsJeff Lindsay
 
SHDH Retrospective, Part 2
SHDH Retrospective, Part 2SHDH Retrospective, Part 2
SHDH Retrospective, Part 2Jeff Lindsay
 
SHDH Retrospective, Part 1
SHDH Retrospective, Part 1SHDH Retrospective, Part 1
SHDH Retrospective, Part 1Jeff Lindsay
 
Superglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebSuperglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebJeff Lindsay
 
Web Hooks Google Tech Talk
Web Hooks Google Tech TalkWeb Hooks Google Tech Talk
Web Hooks Google Tech TalkJeff Lindsay
 
Beyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreBeyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreJeff Lindsay
 
Web Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowWeb Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowJeff Lindsay
 

More from Jeff Lindsay (19)

Hack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkHack Party SHDH Lightning Talk
Hack Party SHDH Lightning Talk
 
Building an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactBuilding an Event-driven Web @ Impact
Building an Event-driven Web @ Impact
 
Evented Web @ Ignite
Evented Web @ IgniteEvented Web @ Ignite
Evented Web @ Ignite
 
Hacker Dojo Origins
Hacker Dojo OriginsHacker Dojo Origins
Hacker Dojo Origins
 
Dinos
DinosDinos
Dinos
 
APIs That Make Things Happen
APIs That Make Things HappenAPIs That Make Things Happen
APIs That Make Things Happen
 
WebHooks in 10 Minutes
WebHooks in 10 MinutesWebHooks in 10 Minutes
WebHooks in 10 Minutes
 
Hacker Dojo @ Google
Hacker Dojo @ GoogleHacker Dojo @ Google
Hacker Dojo @ Google
 
How WebHooks Will Make Us All Programmers
How WebHooks Will Make Us All ProgrammersHow WebHooks Will Make Us All Programmers
How WebHooks Will Make Us All Programmers
 
Creating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityCreating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game Community
 
Dissolving Problems
Dissolving ProblemsDissolving Problems
Dissolving Problems
 
SHDH Retrospective, Part 2
SHDH Retrospective, Part 2SHDH Retrospective, Part 2
SHDH Retrospective, Part 2
 
SHDH Retrospective, Part 1
SHDH Retrospective, Part 1SHDH Retrospective, Part 1
SHDH Retrospective, Part 1
 
Superglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebSuperglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the Web
 
Using Web Hooks
Using Web HooksUsing Web Hooks
Using Web Hooks
 
Web Hooks Google Tech Talk
Web Hooks Google Tech TalkWeb Hooks Google Tech Talk
Web Hooks Google Tech Talk
 
Beyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreBeyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and More
 
Web Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowWeb Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of Tomorrow
 
Web Hooks
Web HooksWeb Hooks
Web Hooks
 

Recently uploaded

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 

Recently uploaded (20)

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 

NullMQ @ PDX

  • 1. NullMQ ZEROMQ SEMANTICS IN THE BROWSER Jeff Lindsay Bulat Shakirzyanov @progrium @avalanche123
  • 2.
  • 3.
  • 9. Toolkit for building messaging systems...
  • 10. Toolkit for building messaging systems... ...behind your firewall
  • 11. Toolkit for building messaging systems... ...behind your firewall ...not for customers
  • 12. Toolkit for building messaging systems... ...behind your firewall ...not for customers ...certainly not with the browser
  • 13. WITH VOICE MAKE & RECEIVE PHONE CALLS SEND & RECEIVE TEXT MESSAGES INSTANTLY BUY PHONE NUMBERS ADD VOICE TO WEB & MOBILE APPS
  • 14.
  • 15.
  • 16.
  • 17. Browser Browser
  • 18. ZeroMQ in the browser?
  • 19. ZeroMQ in the browser? • libzmq is a C++ library
  • 20. ZeroMQ in the browser? • libzmq is a C++ library • Browser extension not viable
  • 21. ZeroMQ in the browser? • libzmq is a C++ library • Browser extension not viable • ZMTP is not valuable by itself
  • 22. Let’s say we did...
  • 23. Let’s say we did... • Security?
  • 24. Let’s say we did... • Security? • Skip existing auth infrastructure
  • 25. Let’s say we did... • Security? • Skip existing auth infrastructure • Need to make something up
  • 26. Let’s say we did... • Security? • Skip existing auth infrastructure • Need to make something up • Direct connections?
  • 27. Let’s say we did... • Security? • Skip existing auth infrastructure • Need to make something up • Direct connections? • Lots of open connections, open ports
  • 28. Let’s say we did... • Security? • Skip existing auth infrastructure • Need to make something up • Direct connections? • Lots of open connections, open ports • Just not “web friendly”
  • 31. What do we want?
  • 32. What do we want? • Near feature/semantic parity with ZeroMQ
  • 33. What do we want? • Near feature/semantic parity with ZeroMQ • Throughput performance not as important
  • 34. What do we want? • Near feature/semantic parity with ZeroMQ • Throughput performance not as important • Embrace nature of the web in design
  • 35. What do we want? • Near feature/semantic parity with ZeroMQ • Throughput performance not as important • Embrace nature of the web in design • Single connection, service multiplexing
  • 36. What do we want? • Near feature/semantic parity with ZeroMQ • Throughput performance not as important • Embrace nature of the web in design • Single connection, service multiplexing • Use existing transports, protocols, etc
  • 37. NullMQ What do we want? • Near feature/semantic parity with ZeroMQ • Throughput performance not as important • Embrace nature of the web in design • Single connection, service multiplexing • Use existing transports, protocols, etc
  • 38. What do we have?
  • 40. WebSocket • ZMTP over WebSocket?
  • 41. WebSocket • ZMTP over WebSocket? • Connection inefficient
  • 42. WebSocket • ZMTP over WebSocket? • Connection inefficient • Not extensible
  • 43. WebSocket • ZMTP over WebSocket? • Connection inefficient • Not extensible • No easy parsers
  • 45. WebSocket • STOMP over WebSocket?
  • 46. WebSocket • STOMP over WebSocket? • Existing parsers, easy to write
  • 47. WebSocket • STOMP over WebSocket? • Existing parsers, easy to write • Very much like HTTP
  • 48. WebSocket • STOMP over WebSocket? • Existing parsers, easy to write • Very much like HTTP • Used primarily to multiplex
  • 50. var url = "ws://hostname/gateway"; var ctx = new nullmq.Context(url); socket = ctx.socket(nullmq.REP); socket.bind("nullmq://echo"); socket.recvall(function(request) { socket.send("Got: "+request); });
  • 51. var url = "ws://hostname/gateway"; var ctx = new nullmq.Context(url); socket = ctx.socket(nullmq.REQ); socket.connect("nullmq://echo"); socket.send("Hello world!"); socket.recv(function(reply) { console.log(reply); // "Got: Hello world!" });
  • 52. Browser Server Application Application NullMQ NullMQ STOMP STOMP WebSocket WebSocket
  • 53. Browser Gateway Backend Application Bridge ZMQ Socket NullMQ NullMQ ZMQ Socket STOMP STOMP ZMQ Socket WebSocket WebSocket
  • 56.
  • 57. STOMP
  • 58. STOMP • Simple and human-readable like HTTP
  • 59. STOMP • Simple and human-readable like HTTP • Extensible via headers
  • 60. STOMP • Simple and human-readable like HTTP • Extensible via headers • Library and server support
  • 61. STOMP • Simple and human-readable like HTTP • Extensible via headers • Library and server support • An easy WebSocket subprotocol
  • 62. STOMP • Simple and human-readable like HTTP • Extensible via headers • Library and server support • An easy WebSocket subprotocol • Can be used to model “virtual connections”
  • 63. STOMP • Simple and human-readable like HTTP • Extensible via headers • Library and server support • An easy WebSocket subprotocol • Can be used to model “virtual connections” • Transactions for multipart messages
  • 64. STOMP “Extensions” 1. Frames include socket type header 2. Header for “connect” or “bind” in SUBSCRIBE 3. Req-Rep messages use “reply-to” header