root / HServer / 00.Server / 00.Program / node_modules / engine.io-parser / Readme.md
이력 | 보기 | 이력해설 | 다운로드 (6.15 KB)
1 |
|
---|---|
2 |
# engine.io-parser |
3 |
|
4 |
[](http://travis-ci.org/socketio/engine.io-parser) |
5 |
[](http://badge.fury.io/js/engine.io-parser) |
6 |
|
7 |
This is the JavaScript parser for the engine.io protocol encoding, |
8 |
shared by both |
9 |
[engine.io-client](https://github.com/socketio/engine.io-client) and |
10 |
[engine.io](https://github.com/socketio/engine.io). |
11 |
|
12 |
## How to use |
13 |
|
14 |
### Standalone |
15 |
|
16 |
The parser can encode/decode packets, payloads, and payloads as binary |
17 |
with the following methods: `encodePacket`, `decodePacket`, `encodePayload`, |
18 |
`decodePayload`, `encodePayloadAsBinary`, `decodePayloadAsBinary`. |
19 |
|
20 |
The browser-side parser also includes `encodePayloadAsArrayBuffer` and `encodePayloadAsBlob`. |
21 |
|
22 |
Example: |
23 |
|
24 |
```js |
25 |
var parser = require('engine.io-parser'); |
26 |
|
27 |
var data = new Buffer(5); |
28 |
for (var i = 0; i < data.length; i++) { data[i] = i; } |
29 |
|
30 |
parser.encodePacket({ type: 'message', data: data }, function(encoded) { |
31 |
var decodedData = parser.decodePacket(encoded); // { type: 'message', data: data } |
32 |
}); |
33 |
``` |
34 |
|
35 |
### With browserify |
36 |
|
37 |
Engine.IO Parser is a commonjs module, which means you can include it by using |
38 |
`require` on the browser and package using [browserify](http://browserify.org/): |
39 |
|
40 |
1. install the parser package |
41 |
|
42 |
```shell |
43 |
npm install engine.io-parser |
44 |
``` |
45 |
|
46 |
1. write your app code |
47 |
|
48 |
```js |
49 |
var parser = require('engine.io-parser'); |
50 |
|
51 |
var testBuffer = new Int8Array(10); |
52 |
for (var i = 0; i < testBuffer.length; i++) testBuffer[i] = i; |
53 |
|
54 |
var packets = [{ type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello' }]; |
55 |
|
56 |
parser.encodePayload(packets, function(encoded) { |
57 |
parser.decodePayload(encoded, |
58 |
function(packet, index, total) { |
59 |
var isLast = index + 1 == total; |
60 |
if (!isLast) { |
61 |
var buffer = new Int8Array(packet.data); // testBuffer |
62 |
} else { |
63 |
var message = packet.data; // 'hello' |
64 |
} |
65 |
}); |
66 |
}); |
67 |
``` |
68 |
|
69 |
1. build your app bundle |
70 |
|
71 |
```bash |
72 |
$ browserify app.js > bundle.js |
73 |
``` |
74 |
|
75 |
1. include on your page |
76 |
|
77 |
```html |
78 |
<script src="/path/to/bundle.js"></script> |
79 |
``` |
80 |
|
81 |
## Features |
82 |
|
83 |
- Runs on browser and node.js seamlessly |
84 |
- Runs inside HTML5 WebWorker |
85 |
- Can encode and decode packets |
86 |
- Encodes from/to ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer in Node |
87 |
|
88 |
## API |
89 |
|
90 |
Note: `cb(type)` means the type is a callback function that contains a parameter of type `type` when called. |
91 |
|
92 |
### Node |
93 |
|
94 |
- `encodePacket` |
95 |
- Encodes a packet. |
96 |
- **Parameters** |
97 |
- `Object`: the packet to encode, has `type` and `data`. |
98 |
- `data`: can be a `String`, `Number`, `Buffer`, `ArrayBuffer` |
99 |
- `Boolean`: optional, binary support |
100 |
- `Function`: callback, returns the encoded packet (`cb(String)`) |
101 |
- `decodePacket` |
102 |
- Decodes a packet. Data also available as an ArrayBuffer if requested. |
103 |
- Returns data as `String` or (`Blob` on browser, `ArrayBuffer` on Node) |
104 |
- **Parameters** |
105 |
- `String` | `ArrayBuffer`: the packet to decode, has `type` and `data` |
106 |
- `String`: optional, the binary type |
107 |
|
108 |
- `encodeBase64Packet` |
109 |
- Encodes a packet with binary data in a base64 string (`String`) |
110 |
- **Parameters** |
111 |
- `Object`: the packet to encode, has `type` and `data` |
112 |
- `Function`: callback, returns the base64 encoded message (`cb(String)`) |
113 |
- `decodeBase64Packet` |
114 |
- Decodes a packet encoded in a base64 string. |
115 |
- **Parameters** |
116 |
- `String`: the base64 encoded message |
117 |
- `String`: optional, the binary type |
118 |
|
119 |
- `encodePayload` |
120 |
- Encodes multiple messages (payload). |
121 |
- If any contents are binary, they will be encoded as base64 strings. Base64 |
122 |
encoded strings are marked with a b before the length specifier |
123 |
- **Parameters** |
124 |
- `Array`: an array of packets |
125 |
- `Boolean`: optional, binary support |
126 |
- `Function`: callback, returns the encoded payload (`cb(String)`) |
127 |
- `decodePayload` |
128 |
- Decodes data when a payload is maybe expected. Possible binary contents are |
129 |
decoded from their base64 representation. |
130 |
- **Parameters** |
131 |
- `String`: the payload |
132 |
- `String`: optional, the binary type |
133 |
- `Function`: callback, returns (cb(`Object`: packet, `Number`:packet index, `Number`:packet total)) |
134 |
|
135 |
- `encodePayloadAsBinary` |
136 |
- Encodes multiple messages (payload) as binary. |
137 |
- **Parameters** |
138 |
- `Array`: an array of packets |
139 |
- `Function`: callback, returns the encoded payload (`cb(Buffer)`) |
140 |
- `decodePayloadAsBinary` |
141 |
- Decodes data when a payload is maybe expected. Strings are decoded by |
142 |
interpreting each byte as a key code for entries marked to start with 0. See |
143 |
description of encodePayloadAsBinary. |
144 |
- **Parameters** |
145 |
- `Buffer`: the buffer |
146 |
- `String`: optional, the binary type |
147 |
- `Function`: callback, returns the decoded packet (`cb(Object)`) |
148 |
|
149 |
### Browser |
150 |
|
151 |
- `encodePayloadAsArrayBuffer` |
152 |
- Encodes multiple messages (payload) as binary. |
153 |
- **Parameters** |
154 |
- `Array`: an array of packets |
155 |
- `Function`: callback, returns the encoded payload (`cb(ArrayBuffer)`) |
156 |
- `encodePayloadAsBlob` |
157 |
- Encodes multiple messages (payload) as blob. |
158 |
- **Parameters** |
159 |
- `Array`: an array of packets |
160 |
- `Function`: callback, returns the encoded payload (`cb(Blob)`) |
161 |
|
162 |
## Tests |
163 |
|
164 |
Standalone tests can be run with `make test` which will run both node.js and browser tests. |
165 |
|
166 |
Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). |
167 |
(You must have zuul setup with a saucelabs account.) |
168 |
|
169 |
You can run the tests locally using the following command: |
170 |
|
171 |
``` |
172 |
./node_modules/.bin/zuul --local 8080 -- test/index.js |
173 |
``` |
174 |
|
175 |
## Support |
176 |
|
177 |
The support channels for `engine.io-parser` are the same as `socket.io`: |
178 |
- irc.freenode.net **#socket.io** |
179 |
- [Google Groups](http://groups.google.com/group/socket_io) |
180 |
- [Website](http://socket.io) |
181 |
|
182 |
## Development |
183 |
|
184 |
To contribute patches, run tests or benchmarks, make sure to clone the |
185 |
repository: |
186 |
|
187 |
```bash |
188 |
git clone git://github.com/LearnBoost/engine.io-parser.git |
189 |
``` |
190 |
|
191 |
Then: |
192 |
|
193 |
```bash |
194 |
cd engine.io-parser |
195 |
npm install |
196 |
``` |
197 |
|
198 |
See the `Tests` section above for how to run tests before submitting any patches. |
199 |
|
200 |
## License |
201 |
|
202 |
MIT |