ForgeTotal.js 5
de

Total.js 5

Nachrichten mit dem Total Messaging Service austauschen

Total.js 5 · total5@0.0.19 tmspublishsubscribewebsocketmessaging Mit Total.js 5 ausgeführt

TMS (Total Messaging Service) ist ein kleiner Nachrichtenbus über einen WebSocket. Du schaltest ihn in der Datei config mit $tms : true ein; der Endpunkt ist /$tms/, und secret_tms ist das Token, das jeder Client im Header x-token senden muss (ein falsches Token schließt die Verbindung mit dem Code 4001, und eine Adresse, die mehr als 5-mal scheitert, wird für eine Weile gesperrt). Wenn sich ein Client verbindet, erhält er eine meta-Nachricht, die auflistet, was die App veröffentlicht, was sie annimmt und was sie kann.

Drei Dinge können bereitgestellt werden, jedes beschrieben durch ein Schema im selben Format name:Type wie das input einer Action:

  • NEWPUBLISH(name, schema) deklariert eine Nachricht, die die App sendet; PUBLISH(name, value) sendet sie an jeden Client, der sie angefordert hat, indem er { type: 'subscribers', subscribers: [name] } gesendet hat.
  • NEWSUBSCRIBE(name, schema, callback) deklariert eine Nachricht, die die App empfängt: Ein Client sendet { type: 'subscribe', id: name, data: {...} }, und callback(message, client) läuft nur, wenn die Daten gültig sind. Die validierten Daten stehen in message.response (message.error ist dort immer null), und client ist der Absender.
  • NEWCALL(name, schema, callback) deklariert eine Funktion, die der Client aufruft: Der Client sendet { type: 'call', id: name, data: {...}, callbackid: '1' }, und die App antwortet mit derselben Nachricht mit success: true und dem Ergebnis in data, oder mit error: true, wenn die Daten ungültig sind. callback(data, done, client) erzeugt das Ergebnis mit done(null, result).

Wird null als Schema von NEWPUBLISH oder NEWSUBSCRIBE übergeben, wird die Deklaration entfernt. Der offizielle Client von Total.js (TMSCLIENT) spricht dieses Protokoll für dich aus einer anderen Total.js-App; jeder WebSocket-Client funktioniert.

UNSUBSCRIBE(name, [callback]) entfernt die Listener einer Nachricht, die die Anwendung empfängt: nur callback, wenn du ihn übergibst, sonst alle. Es liefert true, wenn etwas entfernt wurde, und false, wenn nichts zu entfernen war.

config
$tms : true
secret_tms : my-tms-token
definitions/tms.js
NEWPUBLISH('news', 'title:String');

NEWSUBSCRIBE('orders', 'id:String, qty:Number', function(message, client) {
	MAIN.orders.push(message.response);
});

NEWCALL('sum', 'a:Number, b:Number', function(data, done) {
	done(null, { total: data.a + data.b });
});

MAIN.orders = [];
controllers/tms.js
exports.install = function() {
	ROUTE('POST /news/ @json', news);
	ROUTE('GET /orders/', orders);
	ROUTE('GET /unsubscribe/', unsubscribe);
};

function news($) {
	PUBLISH('news', { title: $.body.title });
	$.success();
}

function orders($) {
	$.json(MAIN.orders);
}

function unsubscribe($) {
	const first = UNSUBSCRIBE('orders');
	const second = UNSUBSCRIBE('orders');
	$.json({ first: first, second: second });
}