ForgeTotal.js 5
ro

Total.js 5

Schimbă mesaje cu Total Messaging Service

Total.js 5 · total5@0.0.19 tmspublishsubscribewebsocketmessaging Executată cu Total.js 5

TMS (Total Messaging Service) este un mic bus de mesaje peste un WebSocket. Îl activezi în fișierul config cu $tms : true; endpoint-ul este /$tms/, iar secret_tms este tokenul pe care fiecare client trebuie să-l trimită în antetul x-token (un token greșit închide conexiunea cu codul 4001, iar o adresă care eșuează de mai mult de 5 ori este blocată o vreme). Când un client se conectează, primește un mesaj meta care listează ce publică aplicația, ce acceptă și ce poate face.

Pot fi expuse trei lucruri, fiecare descris de o schemă în același format name:Type ca input-ul unei acțiuni:

  • NEWPUBLISH(name, schema) declară un mesaj pe care aplicația îl trimite; PUBLISH(name, value) îl trimite fiecărui client care l-a cerut trimițând { type: 'subscribers', subscribers: [name] }.
  • NEWSUBSCRIBE(name, schema, callback) declară un mesaj pe care aplicația îl primește: un client trimite { type: 'subscribe', id: name, data: {...} }, iar callback(message, client) rulează doar când datele sunt valide. Datele validate sunt în message.response (message.error este acolo mereu null), iar client este expeditorul.
  • NEWCALL(name, schema, callback) declară o funcție pe care clientul o apelează: clientul trimite { type: 'call', id: name, data: {...}, callbackid: '1' }, iar aplicația răspunde cu același mesaj cu success: true și rezultatul în data, sau cu error: true când datele sunt invalide. callback(data, done, client) produce rezultatul cu done(null, result).

Transmiterea lui null ca schemă pentru NEWPUBLISH sau NEWSUBSCRIBE elimină declarația. Clientul oficial al Total.js (TMSCLIENT) vorbește acest protocol pentru tine dintr-o altă aplicație Total.js; orice client WebSocket funcționează.

UNSUBSCRIBE(name, [callback]) elimină ascultătorii unui mesaj pe care aplicația îl primește: doar callback când îl transmiți, altfel pe toți. Returnează true când a eliminat ceva și false când nu era nimic de eliminat.

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 });
}