|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- # ws: a node.js websocket library
-
- [![Build Status](https://travis-ci.org/einaros/ws.svg?branch=master)](https://travis-ci.org/einaros/ws)
-
- `ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455,
- and [probably the fastest WebSocket library for node.js][archive].
-
- Passes the quite extensive Autobahn test suite. See http://einaros.github.com/ws
- for the full reports.
-
- ## Protocol support
-
- * **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera.
- Added to ws version 0.4.2, but server only. Can be disabled by setting the
- `disableHixie` option to true.)
- * **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
- * **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`)
-
- ### Installing
-
- ```
- npm install --save ws
- ```
-
- ### Sending and receiving text data
-
- ```js
- var WebSocket = require('ws');
- var ws = new WebSocket('ws://www.host.com/path');
-
- ws.on('open', function open() {
- ws.send('something');
- });
-
- ws.on('message', function(data, flags) {
- // flags.binary will be set if a binary data is received.
- // flags.masked will be set if the data was masked.
- });
- ```
-
- ### Sending binary data
-
- ```js
- var WebSocket = require('ws');
- var ws = new WebSocket('ws://www.host.com/path');
-
- ws.on('open', function open() {
- var array = new Float32Array(5);
-
- for (var i = 0; i < array.length; ++i) {
- array[i] = i / 2;
- }
-
- ws.send(array, { binary: true, mask: true });
- });
- ```
-
- Setting `mask`, as done for the send options above, will cause the data to be
- masked according to the WebSocket protocol. The same option applies for text
- data.
-
- ### Server example
-
- ```js
- var WebSocketServer = require('ws').Server
- , wss = new WebSocketServer({ port: 8080 });
-
- wss.on('connection', function connection(ws) {
- ws.on('message', function incoming(message) {
- console.log('received: %s', message);
- });
-
- ws.send('something');
- });
- ```
-
- ### Server sending broadcast data
-
- ```js
- var WebSocketServer = require('ws').Server
- , wss = new WebSocketServer({ port: 8080 });
-
- wss.broadcast = function broadcast(data) {
- wss.clients.forEach(function each(client) {
- client.send(data);
- });
- };
- ```
-
- ### Error handling best practices
-
- ```js
- // If the WebSocket is closed before the following send is attempted
- ws.send('something');
-
- // Errors (both immediate and async write errors) can be detected in an optional
- // callback. The callback is also the only way of being notified that data has
- // actually been sent.
- ws.send('something', function ack(error) {
- // if error is not defined, the send has been completed,
- // otherwise the error object will indicate what failed.
- });
-
- // Immediate errors can also be handled with try/catch-blocks, but **note** that
- // since sends are inherently asynchronous, socket write failures will *not* be
- // captured when this technique is used.
- try { ws.send('something'); }
- catch (e) { /* handle error */ }
- ```
-
- ### echo.websocket.org demo
-
- ```js
- var WebSocket = require('ws');
- var ws = new WebSocket('ws://echo.websocket.org/', {
- protocolVersion: 8,
- origin: 'http://websocket.org'
- });
-
- ws.on('open', function open() {
- console.log('connected');
- ws.send(Date.now().toString(), {mask: true});
- });
-
- ws.on('close', function close() {
- console.log('disconnected');
- });
-
- ws.on('message', function message(data, flags) {
- console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags);
-
- setTimeout(function timeout() {
- ws.send(Date.now().toString(), {mask: true});
- }, 500);
- });
- ```
-
- ### Other examples
-
- For a full example with a browser client communicating with a ws server, see the
- examples folder.
-
- Note that the usage together with Express 3.0 is quite different from Express
- 2.x. The difference is expressed in the two different serverstats-examples.
-
- Otherwise, see the test cases.
-
- ### Running the tests
-
- ```
- make test
- ```
-
- ## API Docs
-
- See the doc/ directory for Node.js-like docs for the ws classes.
-
- ## Changelog
-
- We're using the GitHub `releases` for changelog entries.
-
- ## License
-
- (The MIT License)
-
- Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- 'Software'), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- [archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs
|