08-27-周三_17-09-29

This commit is contained in:
2025-08-27 17:10:05 +08:00
commit 86df397d8f
12735 changed files with 1145479 additions and 0 deletions

139
node_modules/dnode-protocol/README.markdown generated vendored Normal file
View File

@@ -0,0 +1,139 @@
dnode-protocol
==============
This module implements the dnode protocol in a reusable form that is presently
used for both the server-side and browser-side dnode code.
[Read about the protocol itself here.](https://github.com/substack/dnode-protocol/blob/master/doc/protocol.markdown)
[![build status](https://secure.travis-ci.org/substack/dnode-protocol.png)](http://travis-ci.org/substack/dnode-protocol)
example
=======
``` js
var proto = require('dnode-protocol');
var s = proto({
x : function (f, g) {
setTimeout(function () { f(5) }, 200);
setTimeout(function () { g(6) }, 400);
},
y : 555
});
var c = proto();
s.on('request', c.handle.bind(c));
c.on('request', s.handle.bind(s));
c.on('remote', function (remote) {
function f (x) { console.log('f(' + x + ')') }
function g (x) { console.log('g(' + x + ')') }
remote.x(f, g);
});
s.start();
c.start();
```
***
```
f(5)
g(6)
```
methods
=======
``` js
var protocol = require('dnode-protocol')
```
var proto = protocol(cons, opts={})
-----------------------------------
Create a new protocol object with a constructor `cons` and an optional callback
wrapper `wrap`.
`cons` should be a function, in which case it will be used to create an instance
by `new cons(remote, proto)` where `remote` is an empty reference to the remote
object before being populated and `proto` is the protocol instance.
If you return an object in `cons` the return value will be used
(`new` does that part).
If you pass in a non-function as `cons`, its value will be used as the instance
directly.
You can optionally specify `opts.wrap` and `opts.unwrap` to wrap and unwrap
remote values for implementing weakmaps or marking callbacks.
The return value of `opts.wrap(cb, id)` will be stored in `proto.callbacks.remote[id]`
and `opts.unwrap(ref, id)` will be called with the `ref` obtained from `wrap()`
previously to turn `ref` back into a `cb`.
proto.handle(req)
-----------------
Handle a request object emitted by the request event, calling the method the
request mentions with the provided arguments.
proto.request(method, args)
---------------------------
Emit a request event for the method id `method` and the raw arguments `args`.
The args will be scrubbed for callbacks and emitted in normal form suitable for
passing to `JSON.stringify()`.
proto.start()
-------------
Begin the methods exchange. All listeners should be bound before this function
is called.
proto.cull(id)
--------------
Instruct the opposing connection to drop all references to the callback
specified by `id`.
events
======
proto.on('request', function (req) { ... })
-------------------------------------------
Emitted when a request is ready to be sent.
The request should be serialized and passed to the opposing connection's
`.handle()`.
proto.on('remote', function (remote) { ... })
---------------------------------------------
Emitted when the remote reference has been populated.
proto.on('fail', function (err) { ... })
----------------------------------------
Emitted when there is a non-fatal failed request.
proto.on('error', function (err) { ... })
-----------------------------------------
Emitted when there is a fatal exception one of the local callbacks.
install
=======
With [npm](http://npmjs.org) do:
```
npm install dnode-protocol
```
license
=======
MIT