websockets with the node stream api. works in browser and node

npm install websocket-stream
161 downloads in the last day
960 downloads in the last week
2 602 downloads in the last month


npm install websocket-stream

use HTML5 websockets the node way -- with streams

in the browser

you can use browserify to package this module for browser use.

var websocket = require('websocket-stream')
var ws = websocket('ws://realtimecats.com')

ws is a stream and speaks stream events: data, error and end. that means you can pipe output to anything that accepts streams. you can also pipe data into streams (such as a webcam feed or audio data)

browserify steps

npm install -g browserify // install browserify
cd node_modules/websocket-stream
npm install . // install dev dependencies
browserify index.js -s websocket-stream > websocket-stream.js // require websocket-stream.js in your client-side app

on the server

using the ws module you can make a websocket server and use this module to get websocket streams on the server:

var WebSocketServer = require('ws').Server
var websocket = require('websocket-stream')
var wss = new WebSocketServer({server: someHTTPServer})
wss.on('connection', function(ws) {
  var stream = websocket(ws)


pass in options as the second argument like this:

websocketStream('ws://foobar', { type: someTypedArray })

// e.g. {type: Uint8Array} means you'll get Uint8Arrays back instead of ArrayBuffers

possible options are...

  protocol: // optional, string, specify websocket protocol
  type: // optional, TypedArray object, wraps the ArrayBuffer before emitting

binary sockets

To send binary data just write a Buffer or TypedArray to the stream. On the other end you will receive Buffer instances if it's the server and ArrayBuffer instances if it's the client. The client will default to ArrayBuffer objects but can also be configured to receive Blobs.

If you write binary data to a websocket on the server, the client will receive binary objects. Same thing goes for strings.



npm loves you