• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Cowboy rabbit-websockets
 

Cowboy rabbit-websockets

on

  • 2,229 views

 

Statistics

Views

Total Views
2,229
Views on SlideShare
2,229
Embed Views
0

Actions

Likes
0
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Cowboy rabbit-websockets Cowboy rabbit-websockets Presentation Transcript

    • Erlang + Message Queue + HTML 5 Tech
    • = Over-engineered Chat Server
    • What Cowboy ? https://github.com/extend/cowboy Small, fast modular web server written in erlang.
    • What Gen Bunny https://github.com/mochi/gen_bunny RabbitMQ client library for simple pubsub in erlang.
    • What Websocket ? https://www.websocket.org/ Bi-directional web communication mechanism.
    • Over Architecturing You want it. I deliver !
    • Server Moving parts Cowboy Gen Bunny Browser
    • Client Moving parts Cowboy Gen Bunny Browser
    • Websockets Technical Detour
    • Client Moving parts BrowserBrowser Server HTTP Port 80Port 80
    • Client Moving parts BrowserBrowser Server WS UpgradeUpgradePort 80Port 80
    • WHY ? WORKS WITH EXISTING PROXIES
    • Client JS Data is live chat stream
    • JS Connection wsUrl = "ws://server:8081/websocket"; websocket = new WebSocket(wsUrl);
    • Websocket Setup websocket = new WebSocket(wsURL); websocket.onopen = ... websocket.onmessage = function(evt){ onMessage(e) }; websocket.onerror = ...
    • onMessage Handler function onMessage(e) { Msg = '<p>' + txt + '</p>' $('#output').prepend(Msg); };
    • Smooth Yeah
    • Server Side Server WS
    • Cowboy What comes to mind ?
    • Kid Rock
    • Fresh Leather
    • Pretty Lil' web server
    • Cowboy Routes, REST, middleware, web sockets and more.
    • Cowboy follows OTP principals.
    • Cowboy WS Required Callbacks init websocket_init websocket_handle websocket_info websocket_terminate
    • Cowboy WS init Upgrades from http → web socket
    • Cowboy WS init({tcp, http}, _Req, _Opts) → {upgrade,protocol,cowboy_websocket}.
    • Cowboy WS websocket_init Run on each connection.
    • Cowboy WS websocket_init(_Name, Req, _Opts) → Pid = consumer:start_link(), {ok, Req, #state{pid=Pid}}.
    • Cowboy WS websocket_handle Recv data from client, optionally return data.
    • Cowboy WS websocket_handle(Data, Req, State) → {text, Msg} = Data, {reply, {text, << "recv: ", Msg/binary >>}, Req, State};
    • Cowboy WS websocket_info Live Push data to client
    • Cowboy WS websocket_info(Data, Req, State) → {reply, {text, Data}, Req,State};
    • Sending to RabbitMQ RabbitMQ websocket_handle
    • Recv from RabbitMQ RabbitMQ websocket_info gen_bunny CONSUMER
    • Message Queues gen bunny
    • gen_bunny follows OTP principals.
    • callbacks Required: ● handle_message ● init ● handle_call ● handle_cast ● handle_info ● terminate
    • callbacks handle_message Handle messages from the message subscribed message queue.
    • callbacks handle_message(Msg, State) → NewState = act_on_msg(Msg,State) {noreply, NewState};
    • MQ perspective Exchange Exchange “Fanout” MSG MSG MSG MSG MSG MSG MSG MSG MSG MSG MSG MSG
    • Live demo Wireless Network: Name: rabbit Password: carrot VISIT: http://10.1.1.1:8081/
    • Benchmarking Method: Connect to Websocket Wait for signal. Send 100 messages. Receive all messages
    • Benchmarking Results: (Didn't get this done in time, sorry) 0.5 1 1.5 2 2.5 3 3.5 4 4.5 0 2 4 6 8 10 12 Column 1 Column 2 Column 3
    • Source Code github.com/wmealing/ bunny-cowboy-websocket