JavaScript implementation of the TCP module that libp2p uses that implements the interface-transport spec
Clone or download
LinusU and daviddias chore: prefer const over let (#99)
Prefer const over let when the binding is static, in order to comply with an upcoming Standard rule.
Latest commit 3ab43a3 Oct 31, 2018

README.md

js-libp2p-tcp

Build Status Coverage Status Dependency Status js-standard-style

JavaScript implementation of the TCP module for libp2p. It exposes the interface-transport for dial/listen. libp2p-tcp is a very thin shim that adds support for dialing to a multiaddr. This small shim will enable libp2p to use other different transports.

Lead Maintainer

Jacob Heun

Table of Contents

Install

npm

> npm install libp2p-tcp

Usage

const TCP = require('libp2p-tcp')
const multiaddr = require('multiaddr')
const pull = require('pull-stream')

const mh = multiaddr('/ip4/127.0.0.1/tcp/9090')

const tcp = new TCP()

const listener = tcp.createListener((socket) => {
  console.log('new connection opened')
  pull(
    pull.values(['hello']),
    socket
  )
})

listener.listen(mh, () => {
  console.log('listening')

  pull(
    tcp.dial(mh),
    pull.collect((err, values) => {
      if (!err) {
        console.log(`Value: ${values.toString()}`)
      } else {
        console.log(`Error: ${err}`)
      }

      // Close connection after reading
      listener.close()
    }),
  )
})

Outputs:

listening
new connection opened
Value: hello

API

Transport

libp2p-tcp accepts TCP addresses both IPFS and non IPFS encapsulated addresses, i.e:

/ip4/127.0.0.1/tcp/4001 /ip4/127.0.0.1/tcp/4001/ipfs/QmHash

Both for dialing and listening.

Connection

Contribute

Contributions are welcome! The libp2p implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:

Please be aware that all interactions related to libp2p are subject to the IPFS Code of Conduct.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © 2015-2016 David Dias