Stability: 1 - Experimental
HTTP transport implementation for Tiny Actor Run-Time in JavaScript.
An implementation of a HTTP transport for Tiny Actor Run-Time in JavaScript.
To run the below example run:
npm run readme
"use strict";
var http = require('http');
var tart = require('tart');
var transport = require('../index.js');
var sponsor = tart.minimal();
var send = sponsor(transport.sendBeh);
var receivedMessageCount = 0;
var receptionist = sponsor(function (message) {
console.log('received message:', message);
receivedMessageCount++;
if (receivedMessageCount >= 2) {
close(); // close listening server
}
});
var serverCapabilities = transport.server(receptionist);
var close = sponsor(serverCapabilities.closeBeh);
var listen = sponsor(serverCapabilities.listenBeh);
var fail = sponsor(function (error) {
console.dir(error);
});
var listenAck = sponsor(function listenAckBeh(message) {
console.log('transport listening on http://' + message.host + ':' + message.port);
send({
address: 'http://localhost:7847/#t5YM5nxnJ/xkPTo3gtHEyLdwMRFIwyJOv5kvcFs+FoMGdyoDNgSLolq0',
content: '{"some":{"json":"content"},"foo":true}',
fail: fail,
ok: function () {
console.log('foo sent');
}
});
send({
address: 'http://localhost:7847/#I0InGCVn0ApX0YBnF5+JFMheKOajHkaTrNthYRI2hOj4GrM5IaWO1Cv0',
content: '{"some":{"json":"content"},"bar":true}',
fail: fail,
ok: function () {
console.log('bar sent');
}
});
});
listen({
host: 'localhost',
port: 7847,
ok: listenAck,
fail: fail
});
npm test
Public API
- transport.sendBeh
- transport.server(receptionist)
- serverCapabilities.closeBeh
- serverCapabilities.listenBeh
Actor behavior that will attempt to send messages over TLS.
Message format:
address
: String HTTP address in URI format. Scheme, host, and port are required. Framgment is optional but usually necessary. For example:http://localhost:7847/#t5YM5nxnJ/xkPTo...
.content
: String JSON content to be sent.fail
: Actorfunction (error) {}
(Default: undefined) Optional actor to reporterror
(if any).ok
: Actorfunction () {}
(Default: undefined) Optional actor to report successful send to the destination.
var send = sponsor(transport.sendBeh);
send({
address: 'http://localhost:7847/#ZkiLrAwGX7N1eeOXXMAeoVp7vsYJKeISjfT5fESfkRiZOIpkPx1bAS8y',
content: '{"some":{"json":"content"}}'
});
receptionist
: Actorfunction (message) {}
Actor to forward traffic received by this server in{address: <URI>, contents: <json>}
format.- Return: Object An object containing behaviors for listen and close capabilities.
closeBeh
: serverCapabilities.closeBehlistenBeh
: serverCapabilities.listenBeh
Creates an entangled pair of capabilities that will control a single HTTP server.
Actor behavior that will close a listening server.
Message is an ack
Actor function () {}
, an actor that will be sent an empty message once the server closes.
var serverCapabilities = transport.server(receptionist);
var close = sponsor(serverCapabilities.closeBeh);
close(sponsor(function ack() {
console.log('acked close');
});
Actor behavior that will create a new listening HTTP server.
Message format:
host
: String HTTP host to listen on.port
: Number HTTP port to listen on.ok
: Actorfunction (message) {}
Optional actor to receive acknowledgment once the server is listening.fail
: Actorfunction (error) {}
Optional actor to receive any errors when starting the HTTP transport.
var serverCapabilities = transport.server(receptionist);
var listen = sponsor(serverCapabilities.listenBeh);
listen({
host: 'localhost',
port: 7847,
ok: sponsor(function listenAckBeh(message) {
console.log('transport listening on http://' + message.host + ':' + message.port);
}),
fail: sponsor(function failBeh(message) {
console.error(message);
})
});