[FT-8][banacorn] Socket.IO for Haskell Folks

66
Socket.IO for Haskell Folks

description

Socket.IO for Haskell Folks --by banacorn --on Functional Thursday Meetup 8

Transcript of [FT-8][banacorn] Socket.IO for Haskell Folks

Page 1: [FT-8][banacorn] Socket.IO for Haskell Folks

Socket.IO for Haskell Folks

Page 2: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 3: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 4: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 5: [FT-8][banacorn] Socket.IO for Haskell Folks

Real-time Applications

Page 6: [FT-8][banacorn] Socket.IO for Haskell Folks

Regular HTTP

Page 7: [FT-8][banacorn] Socket.IO for Haskell Folks

Polling

Page 8: [FT-8][banacorn] Socket.IO for Haskell Folks

Long-Polling

Page 9: [FT-8][banacorn] Socket.IO for Haskell Folks

EventSource

Page 10: [FT-8][banacorn] Socket.IO for Haskell Folks

WebSocket

Page 11: [FT-8][banacorn] Socket.IO for Haskell Folks

WebSocket

Page 12: [FT-8][banacorn] Socket.IO for Haskell Folks

“TCP for the web”

Page 13: [FT-8][banacorn] Socket.IO for Haskell Folks

PROS

Bi-directional + Full-duplex !

Lower overhead !

Port 80

Page 14: [FT-8][banacorn] Socket.IO for Haskell Folks

CONSNot widely supported !

Still a draft*

Page 15: [FT-8][banacorn] Socket.IO for Haskell Folks

Socket.IO

Page 16: [FT-8][banacorn] Socket.IO for Haskell Folks

asdf

Page 17: [FT-8][banacorn] Socket.IO for Haskell Folks

“The cross-browser cross-device WebSocket”

Page 18: [FT-8][banacorn] Socket.IO for Haskell Folks

Browser Support

IE 5.5+ Safari 2+ Google Chrome 4+ Firefox 3+ Opera 10.61+

Page 19: [FT-8][banacorn] Socket.IO for Haskell Folks

Transport Support

WebSocket Flash Socket AJAX long polling AJAX multipart Forever iframe JSONP Polling

Page 20: [FT-8][banacorn] Socket.IO for Haskell Folks

socket.emit(‘news’, ‘hey!’); !

!

!

Server

Page 21: [FT-8][banacorn] Socket.IO for Haskell Folks

socket.on(‘news’, function (data) { console.log(data); // hey! }); !

Client

Page 22: [FT-8][banacorn] Socket.IO for Haskell Folks

socket.emit(‘news’, ‘hey!’); !

socket.on(‘ping’, function () { socket.emit(‘pong’); });

Server

Page 23: [FT-8][banacorn] Socket.IO for Haskell Folks

socket.on(‘news’, function (data) { console.log(data); // hey! }); !

socket.emit(‘ping’);

Client

Page 24: [FT-8][banacorn] Socket.IO for Haskell Folks

Originated from Node.js

Page 25: [FT-8][banacorn] Socket.IO for Haskell Folks

Now also available in many other languages

ErlangJava

Lua

Python

Perl

Go

C++

C

Objective-C

Haxe

Ruby

PHP

Page 26: [FT-8][banacorn] Socket.IO for Haskell Folks

Except for Haskell

Page 27: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 28: [FT-8][banacorn] Socket.IO for Haskell Folks

socketio-0.1.0

Page 29: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 30: [FT-8][banacorn] Socket.IO for Haskell Folks

socket.emit(‘news’, ‘hey!’); !

socket.on(‘ping’, function () { socket.emit(‘pong’); });

Page 31: [FT-8][banacorn] Socket.IO for Haskell Folks

emit “news” [“hey!”] !

on “ping” $ emit “pong” []

Page 32: [FT-8][banacorn] Socket.IO for Haskell Folks

Transport Support

WebSocket (80%) Flash Socket AJAX long polling AJAX multipart Forever iframe JSONP Polling

Page 33: [FT-8][banacorn] Socket.IO for Haskell Folks

Difficulties

Page 34: [FT-8][banacorn] Socket.IO for Haskell Folks

Transport Support

ಠ~ಠ

Page 35: [FT-8][banacorn] Socket.IO for Haskell Folks

Transport Support

WebSocket Flash Socket AJAX long polling AJAX multipart Forever iframe JSONP Polling

Page 36: [FT-8][banacorn] Socket.IO for Haskell Folks

Transport Support

WebSocket Flash Socket AJAX long polling AJAX multipart Forever iframe JSONP Polling

Page 37: [FT-8][banacorn] Socket.IO for Haskell Folks

“Premature optimization is the root of all evil”

Page 38: [FT-8][banacorn] Socket.IO for Haskell Folks

Monad Transformers

ಠ~ಠ

Page 39: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 40: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 41: [FT-8][banacorn] Socket.IO for Haskell Folks

!

KEEP

CALM AND

JUST

USE IT

Page 42: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 43: [FT-8][banacorn] Socket.IO for Haskell Folks

Iteratee I/O

ಠ~ಠ

Page 44: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 45: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 46: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 47: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 48: [FT-8][banacorn] Socket.IO for Haskell Folks

String/Text/ByteString

ಠ~ಠ

Page 49: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 50: [FT-8][banacorn] Socket.IO for Haskell Folks

{-# LANGUAGE OverloadedStrings #-}

Page 51: [FT-8][banacorn] Socket.IO for Haskell Folks

Open Source Community

ಠ~ಠ

Page 52: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 53: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 54: [FT-8][banacorn] Socket.IO for Haskell Folks

Originated from Node.js

Page 55: [FT-8][banacorn] Socket.IO for Haskell Folks

Cabal Hell

ಠ~ಠ

Page 56: [FT-8][banacorn] Socket.IO for Haskell Folks

> cabal uninstall cabal: unrecognised command: uninstall (try --help)

Page 57: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 58: [FT-8][banacorn] Socket.IO for Haskell Folks

cabal-dev?

Page 59: [FT-8][banacorn] Socket.IO for Haskell Folks

LIVE DEMO

Page 60: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 61: [FT-8][banacorn] Socket.IO for Haskell Folks

http://banacorn.org:3000

Page 62: [FT-8][banacorn] Socket.IO for Haskell Folks
Page 63: [FT-8][banacorn] Socket.IO for Haskell Folks

TODO

Page 64: [FT-8][banacorn] Socket.IO for Haskell Folks

cabal-dev?

Page 65: [FT-8][banacorn] Socket.IO for Haskell Folks

banacorn/socket.io-haskell !

!

!

ALL CONTRIBUTIONS ARE WELCOME!

Page 66: [FT-8][banacorn] Socket.IO for Haskell Folks

THANKS! Questions?