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

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesSanjay Willie
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
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
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
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
 
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
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 

Recently uploaded (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
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
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
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
 
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
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 

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