/stream-url

URLs for streams: two powerful concepts, united

Primary LanguageJavaScriptMIT LicenseMIT

Stream URLs

The package aims to unite two powerful universal concepts: streams and URLs. stream-url encapsulates details of a particular medium and allows the app to open data streams to URLs. stream-url is a syntactic sugar, in a sense, but it definitely helps to clear a subsystem's code out of technical details and make it easily pluggable.

    var su = require('stream-url');
    
    // TCP server
    var tcp_server = su.listen('tcp://localhost:1234', (err, serv) => {
        serv.on('connection', stream => {
        ...
        
    // stdin/stdout "client"
    su.connect('std:', (err, stream) => {
        ...

Build Status

API

  • listen(url [,options] [,callback]) start a server (stream factory) listening at the url, using options. Invoke callback(err, server) when ready or failed. The server will emit a connection event for every new incoming connection/stream.
  • connect(url [,options] [,callback]) connect to a server at (create a stream to) url. Invoke callback(err, stream) once ready to write or failed to connect. The stream will emit all the usual events: data, end, error.

This package defines just one fictive URL protocol named 0 which masquerades local invocations for a stream. The 0 protocol is mostly useful for connecting componenets locally. It is not that useful for unit testing as it skips serialization/ deserialization for the sake of efficiency. See test/ for usage examples.

All "real" protocols are defined in separate packages, as those introduce non-trivial dependencies.