| # engine.io-parser | |
| [](http://travis-ci.org/socketio/engine.io-parser) | |
| [](http://badge.fury.io/js/engine.io-parser) | |
| This is the JavaScript parser for the engine.io protocol encoding, | |
| shared by both | |
| [engine.io-client](https://github.com/socketio/engine.io-client) and | |
| [engine.io](https://github.com/socketio/engine.io). | |
| ## How to use | |
| ### Standalone | |
| The parser can encode/decode packets, payloads, and payloads as binary | |
| with the following methods: `encodePacket`, `decodePacket`, `encodePayload`, | |
| `decodePayload`, `encodePayloadAsBinary`, `decodePayloadAsBinary`. | |
| The browser-side parser also includes `encodePayloadAsArrayBuffer` and `encodePayloadAsBlob`. | |
| Example: | |
| ```js | |
| var parser = require('engine.io-parser'); | |
| var data = new Buffer(5); | |
| for (var i = 0; i < data.length; i++) { data[i] = i; } | |
| parser.encodePacket({ type: 'message', data: data }, function(encoded) { | |
| var decodedData = parser.decodePacket(encoded); // { type: 'message', data: data } | |
| }); | |
| ``` | |
| ### With browserify | |
| Engine.IO Parser is a commonjs module, which means you can include it by using | |
| `require` on the browser and package using [browserify](http://browserify.org/): | |
| 1. install the parser package | |
| ```shell | |
| npm install engine.io-parser | |
| ``` | |
| 1. write your app code | |
| ```js | |
| var parser = require('engine.io-parser'); | |
| var testBuffer = new Int8Array(10); | |
| for (var i = 0; i < testBuffer.length; i++) testBuffer[i] = i; | |
| var packets = [{ type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello' }]; | |
| parser.encodePayload(packets, function(encoded) { | |
| parser.decodePayload(encoded, | |
| function(packet, index, total) { | |
| var isLast = index + 1 == total; | |
| if (!isLast) { | |
| var buffer = new Int8Array(packet.data); // testBuffer | |
| } else { | |
| var message = packet.data; // 'hello' | |
| } | |
| }); | |
| }); | |
| ``` | |
| 1. build your app bundle | |
| ```bash | |
| $ browserify app.js > bundle.js | |
| ``` | |
| 1. include on your page | |
| ```html | |
| <script src="/path/to/bundle.js"></script> | |
| ``` | |
| ## Features | |
| - Runs on browser and node.js seamlessly | |
| - Runs inside HTML5 WebWorker | |
| - Can encode and decode packets | |
| - Encodes from/to ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer in Node | |
| ## API | |
| Note: `cb(type)` means the type is a callback function that contains a parameter of type `type` when called. | |
| ### Node | |
| - `encodePacket` | |
| - Encodes a packet. | |
| - **Parameters** | |
| - `Object`: the packet to encode, has `type` and `data`. | |
| - `data`: can be a `String`, `Number`, `Buffer`, `ArrayBuffer` | |
| - `Boolean`: optional, binary support | |
| - `Function`: callback, returns the encoded packet (`cb(String)`) | |
| - `decodePacket` | |
| - Decodes a packet. Data also available as an ArrayBuffer if requested. | |
| - Returns data as `String` or (`Blob` on browser, `ArrayBuffer` on Node) | |
| - **Parameters** | |
| - `String` | `ArrayBuffer`: the packet to decode, has `type` and `data` | |
| - `String`: optional, the binary type | |
| - `encodeBase64Packet` | |
| - Encodes a packet with binary data in a base64 string (`String`) | |
| - **Parameters** | |
| - `Object`: the packet to encode, has `type` and `data` | |
| - `Function`: callback, returns the base64 encoded message (`cb(String)`) | |
| - `decodeBase64Packet` | |
| - Decodes a packet encoded in a base64 string. | |
| - **Parameters** | |
| - `String`: the base64 encoded message | |
| - `String`: optional, the binary type | |
| - `encodePayload` | |
| - Encodes multiple messages (payload). | |
| - If any contents are binary, they will be encoded as base64 strings. Base64 | |
| encoded strings are marked with a b before the length specifier | |
| - **Parameters** | |
| - `Array`: an array of packets | |
| - `Boolean`: optional, binary support | |
| - `Function`: callback, returns the encoded payload (`cb(String)`) | |
| - `decodePayload` | |
| - Decodes data when a payload is maybe expected. Possible binary contents are | |
| decoded from their base64 representation. | |
| - **Parameters** | |
| - `String`: the payload | |
| - `String`: optional, the binary type | |
| - `Function`: callback, returns (cb(`Object`: packet, `Number`:packet index, `Number`:packet total)) | |
| - `encodePayloadAsBinary` | |
| - Encodes multiple messages (payload) as binary. | |
| - **Parameters** | |
| - `Array`: an array of packets | |
| - `Function`: callback, returns the encoded payload (`cb(Buffer)`) | |
| - `decodePayloadAsBinary` | |
| - Decodes data when a payload is maybe expected. Strings are decoded by | |
| interpreting each byte as a key code for entries marked to start with 0. See | |
| description of encodePayloadAsBinary. | |
| - **Parameters** | |
| - `Buffer`: the buffer | |
| - `String`: optional, the binary type | |
| - `Function`: callback, returns the decoded packet (`cb(Object)`) | |
| ### Browser | |
| - `encodePayloadAsArrayBuffer` | |
| - Encodes multiple messages (payload) as binary. | |
| - **Parameters** | |
| - `Array`: an array of packets | |
| - `Function`: callback, returns the encoded payload (`cb(ArrayBuffer)`) | |
| - `encodePayloadAsBlob` | |
| - Encodes multiple messages (payload) as blob. | |
| - **Parameters** | |
| - `Array`: an array of packets | |
| - `Function`: callback, returns the encoded payload (`cb(Blob)`) | |
| ## Tests | |
| Standalone tests can be run with `make test` which will run both node.js and browser tests. | |
| Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). | |
| (You must have zuul setup with a saucelabs account.) | |
| You can run the tests locally using the following command: | |
| ``` | |
| ./node_modules/.bin/zuul --local 8080 -- test/index.js | |
| ``` | |
| ## Support | |
| The support channels for `engine.io-parser` are the same as `socket.io`: | |
| - irc.freenode.net **#socket.io** | |
| - [Google Groups](http://groups.google.com/group/socket_io) | |
| - [Website](http://socket.io) | |
| ## Development | |
| To contribute patches, run tests or benchmarks, make sure to clone the | |
| repository: | |
| ```bash | |
| git clone git://github.com/LearnBoost/engine.io-parser.git | |
| ``` | |
| Then: | |
| ```bash | |
| cd engine.io-parser | |
| npm install | |
| ``` | |
| See the `Tests` section above for how to run tests before submitting any patches. | |
| ## License | |
| MIT | |