npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

k-rpc-socket

v1.11.1

Published

Low level implementation of the k-rpc network layer that the BitTorrent DHT uses

Downloads

25,782

Readme

k-rpc-socket

Low level implementation of the k-rpc network layer that the BitTorrent DHT uses. Mostly extracted from the bittorrent-dht module on npm into its own repo.

npm install k-rpc-socket

build status

Usage

var rpc = require('k-rpc-socket')

var socket = rpc()

socket.on('query', function (query, peer) {
  socket.response(peer, query, {echo: query.a})
})

socket.bind(10000, function () {
  var anotherSocket = rpc()
  anotherSocket.query({host: '127.0.0.1', port: 10000}, {q: 'echo', a: {hello: 'world'}}, function (err, response) {
    console.log(response.r) // prints {echo: {hello: Buffer('world')}}
  })
})

API

var socket = rpc([options])

Create a new k-rpc-socket. Options include:

{
  timeout: queryTimeout, // defaults to 2s
  socket: optionalUdpSocket,
  isIP: optionalBooleanFunction
}

socket.send(peer, message, [callback])

Send a raw message. The callback is called when the message has been flushed from the socket.

var id = socket.query(peer, query, [callback])

Send a query message. The callback is called with (err, response, peer, request). You should set the method name you are trying to call as {q: 'method_name'} and query data as {a: someQueryData}.

The query method returns a query id. You can use this id to cancel the query using the .cancel method.

socket.cancel(id)

Cancel a query. Will call the corresponding query's callback with an error indicating that it was cancelled.

socket.response(peer, query, response, [callback])

Send a response to a query. The callback is called when the message has been flushed from the socket.

socket.error(peer, query, error, [callback])

Send an error reploy to a query. The callback is called when the message has been flushed from the socket.

socket.inflight

Integer representing the number of concurrent queries that are currently pending.

socket.destroy()

Destroys and unbinds the socket

socket.bind([port], [address], [callback])

Call this to bind to a specific port. If port is not specified or is 0, the operating system will attempt to bind to a random port. If address is not specified, the operating system will attempt to listen on all addresses.

If you don't call this a random free port will be chosen.

socket.on('query', query, peer)

When a query is received a query event is emitted with the query data and a peer object representing the querying peer.

socket.on('warning', error)

Emitted when a non fatal error has occured. It is safe to ignore this.

socket.on('error', error)

Emitted when a fatal error has occured.

License

MIT