|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
-
- # engine.io-parser
-
- [](https://travis-ci.org/socketio/engine.io-parser)
- [](https://npmjs.com/package/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
|