forked from tmm1/jssocket
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
137 lines (82 loc) · 3.48 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
jsSocket: generic javascript socket API
(c) 2008 Aman Gupta (tmm1)
http://github.com/tmm1/jsSocket
WHAT IS IT
jsSocket uses Flash's XMLSocket to expose a simple socket API to javascript
REQUIREMENTS
jquery, jquery.media, jsonStringify and jsSocket.swf
mtasc (http://mtasc.org) or haxe (http://haxe.org) to re-compile the swfs from source
FEATURES
* multiple sockets on the same page
* keepalive to keep connections open
* automatic reconnect
* status callback for custom connecting/disconnected/reconnecting UI
* customizable logger for debugging
WHY FLASH
* high market penetration
(according to a meebo study, more people had flash installed than javascript enabled)
* single TCP connection (instead of one ajax connection per outgoing packet)
* lower bandwidth usage and latency than long-polling
CAVEATS
* extra initial TCP connection required for security policy
* packets must be delimited by null bytes
* html and binary content must be base64 encoded
USAGE
- Specify the path to jsSocket.swf
jsSocket.swf = '/flash/jsSocket.swf'
- Connect to site.com on port 1234
var socket = jsSocket()
socket.connect('site.com', 1234)
socket.send('hello world')
- Connect to document.location.hostname on port 443
var socket = jsSocket({ port: 443 })
- Install socket with default port and connect manually after setting data callback
var socket = jsSocket({ port: 443, autoconnect: false })
socket.onData = function(data){ alert(data) }
socket.connect()
- Hook into connected/disconnected/data events
var socket = jsSocket({
onOpen: function() { alert('connected') },
onData: function(data){ alert('got data: ' + data) },
onClose: function() { alert('disconnected') }
})
- Disable keepalive pings and auto-reconnect
var socket = jsSocket({ keepalive: false, autoreconnect: false })
socket.connect('site.com', 1234)
- Send custom keepalive packets every minute
var socket = jsSocket()
socket.keepalive = function(){ socket.send('ping') }
- Track the status of a socket connection
var socket = jsSocket({ port: 443 })
socket.onStatus = function(type, val){
switch(type){
case 'connecting': // connecting to the server
break
case 'connected': // connected
break
case 'disconnected': // disconnected
break
case 'waiting': // waiting to reconnect in val seconds
break
case 'failed': // attempted max reconnects
break
}
}
- Debug jsSocket
var socket = jsSocket({ debug: true })
socket.logger = console.log // log to firebug
socket.logger = function(arg){ // log to a div
if(!$('#logger'))
$('<div/>').attr('id', 'logger').appendTo('body')
$('#logger').append(
$('<p/>').text(arg.toString())
)
}
OTHER RESOURCES
Alex MacCaw's Juggernaut: http://juggernaut.rubyforge.org
jssockets (uses Flex/Flash9's RemotingSocket): http://code.google.com/p/jssockets
XMLSocket bridge: http://www.devpro.it/xmlsocket/
FlashSocket: http://ionelmc.wordpress.com/2008/11/29/flash-socket-bridge-with-haxe/
socketBridge: http://matthaynes.net/blog/2008/07/17/socketbridge-flash-javascript-socket-bridge/
LICENSE
Licensed under the Ruby License (http://www.ruby-lang.org/en/LICENSE.txt).