Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Turn any duplex stream into an actor. Built on the the AMP protocol for opaque binary and javascript argument support.
Actors are similar to traditional RPC however they are isolated units of communication, an actor receives and sends zero or more messages to and from its peer with bi-directional messaging. Typical RPC is done at the process-level, meaning in order to work with data coupled with an identifier such as a user id that the id must be passed each request, whereas an actor may retain this state.
$ npm install actorify
Simple hello world PING/PONG example:
var net = require('net');
var actorify = require('actorify');
// server
net.createServer(function(sock){
var actor = actorify(sock);
actor.on('ping', function(){
console.log('PING');
actor.send('pong');
});
}).listen(3000);
// client
var sock = net.connect(3000);
var actor = actorify(sock);
setInterval(function(){
actor.send('ping');
actor.once('pong', function(){
console.log('PONG');
});
}, 300);
Sending a single request with multiple async responses, also illustrates how arguments may be primitives, json objects, or opaque binary such as sending an image over the wire for resizing, receiving multiple thumbnail blobs and their respective size:
var net = require('net');
var actorify = require('actorify');
// client
net.createServer(function(sock){
var actor = actorify(sock);
var img = new Buffer('faux data');
actor.on('image thumbnails', function(img, sizes){
console.log('%s byte image -> %s', img.length, sizes.join(', '));
sizes.forEach(function(size){
actor.send('thumb', size, new Buffer('thumb data'));
});
});
}).listen(3000);
// client
setInterval(function(){
var sock = net.connect(3000);
var actor = actorify(sock);
console.log('send image for thumbs');
var img = new Buffer('faux image');
actor.send('image thumbnails', img, ['150x150', '300x300']);
actor.on('thumb', function(size, img){
console.log('thumb: %s', size);
});
}, 500);
You may also associate callbacks with an actor message, effectively turning it into a traditional RPC call:
actor.send('get user', 'tobi', function(err, user){
});
actor.on('get user', function(name, reply){
getUser(name, function(err, user){
reply(err, user);
});
});
When performing a request you may optionally timeout the response,
after which an Error
will be passed to the callback and any subsequent
response will be ignored.
The argument may be numeric milliseconds or represented as a string such as "5s", "10m", "1 minute", "30 seconds", etc. By default there is no timeout.
actor.send('hello', function(err, res){
}).timeout('5s');
Stream errors are not handled, you must add an "error" listener
to the stream
passed to actorify().
Benchmarks on my first generation MBP Retina with node 0.11.x. Real results are likely higher since having the producer on the same machine as the consumer makes results misleading.
With 64b messages:
min: 56,818 ops/s
mean: 159,207 ops/s
median: 138,888 ops/s
total: 1,376,188 ops in 8.644s
through: 1.52 mb/s
With 1kb messages:
min: 56,179 ops/s
mean: 153,919 ops/s
median: 142,857 ops/s
total: 909,974 ops in 5.912s
through: 150.31 mb/s
With 10kb messages:
min: 11,389 ops/s
mean: 64,167 ops/s
median: 64,102 ops/s
total: 352,025 ops in 5.486s
through: 626.64 mb/s
With 32kb messages:
min: 7,032 ops/s
mean: 14,269 ops/s
median: 23,584 ops/s
total: 86,329 ops in 6.05s
through: 445.91 mb/s
MIT
FAQs
Turn any duplex stream into an actor
We found that actorify demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.