Node.js implementation of the TCP module that libp2p uses, which implements the interface-connection and interface-transport interfaces
$ npm i @libp2p/tcp
> npm install @libp2p/tcp
import { TCP } from '@libp2p/tcp'
import { multiaddr } from '@multiformats/multiaddr'
import {pipe} from 'it-pipe'
import all from 'it-all'
// A simple upgrader that just returns the MultiaddrConnection
const upgrader = {
upgradeInbound: async maConn => maConn,
upgradeOutbound: async maConn => maConn
}
const tcp = new TCP()
const listener = tcp.createListener({
upgrader,
handler: (socket) => {
console.log('new connection opened')
pipe(
['hello', ' ', 'World!'],
socket
)
}
})
const addr = multiaddr('/ip4/127.0.0.1/tcp/9090')
await listener.listen(addr)
console.log('listening')
const socket = await tcp.dial(addr, { upgrader })
const values = await pipe(
socket,
all
)
console.log(`Value: ${values.toString()}`)
// Close connection after reading
await listener.close()
Outputs:
listening
new connection opened
Value: hello World!
libp2p-tcp
accepts TCP addresses as 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)
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:
- Check out the existing issues.
- Perform code reviews.
- Add tests. There can never be enough tests.
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.
The libp2p implementation in JavaScript is a work in progress. As such, there are a few things you can do right now to help out:
- Go through the modules and check out existing issues. This is especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
- Perform code reviews. More eyes will help a) speed the project along b) ensure quality and c) reduce possible future bugs.
Licensed under either of
- Apache 2.0, (LICENSE-APACHE / http://www.apache.org/licenses/LICENSE-2.0)
- MIT (LICENSE-MIT / http://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.