ForgeTotal.js 5
el

Total.js 5

Ανταλλαγή μηνυμάτων με το Total Messaging Service

Total.js 5 · total5@0.0.19 tmspublishsubscribewebsocketmessaging Εκτελέστηκε με το Total.js 5

Το TMS (Total Messaging Service) είναι ένας μικρός δίαυλος μηνυμάτων πάνω από ένα WebSocket. Το ενεργοποιείτε στο αρχείο config με $tms : true· το endpoint είναι /$tms/ και το secret_tms είναι το token που πρέπει να στέλνει κάθε πελάτης στην κεφαλίδα x-token (ένα λάθος token κλείνει τη σύνδεση με κωδικό 4001 και μια διεύθυνση που αποτυγχάνει περισσότερες από 5 φορές μπλοκάρεται για λίγο). Όταν ένας πελάτης συνδεθεί, λαμβάνει ένα μήνυμα meta που απαριθμεί τι δημοσιεύει η εφαρμογή, τι δέχεται και τι μπορεί να κάνει.

Τρία πράγματα μπορούν να εκτεθούν, καθένα περιγραμμένο από ένα schema στην ίδια μορφή name:Type με το input ενός action:

  • το NEWPUBLISH(name, schema) δηλώνει ένα μήνυμα που η εφαρμογή στέλνει· το PUBLISH(name, value) το στέλνει σε κάθε πελάτη που το ζήτησε στέλνοντας { type: 'subscribers', subscribers: [name] }.
  • το NEWSUBSCRIBE(name, schema, callback) δηλώνει ένα μήνυμα που η εφαρμογή λαμβάνει: ένας πελάτης στέλνει { type: 'subscribe', id: name, data: {...} } και το callback(message, client) εκτελείται μόνο όταν τα δεδομένα είναι έγκυρα. Τα επικυρωμένα δεδομένα βρίσκονται στο message.response (το message.error είναι εκεί πάντα null) και το client είναι ο αποστολέας.
  • το NEWCALL(name, schema, callback) δηλώνει μια συνάρτηση που ο πελάτης καλεί: ο πελάτης στέλνει { type: 'call', id: name, data: {...}, callbackid: '1' } και η εφαρμογή απαντά με το ίδιο μήνυμα με success: true και το αποτέλεσμα στο data, ή με error: true όταν τα δεδομένα είναι άκυρα. Το callback(data, done, client) παράγει το αποτέλεσμα με το done(null, result).

Η μετάδοση null ως schema στα NEWPUBLISH ή NEWSUBSCRIBE αφαιρεί τη δήλωση. Ο επίσημος πελάτης του Total.js (TMSCLIENT) μιλά αυτό το πρωτόκολλο για εσάς από μια άλλη εφαρμογή Total.js· κάθε πελάτης WebSocket είναι κατάλληλος.

Το UNSUBSCRIBE(name, [callback]) αφαιρεί τους ακροατές ενός μηνύματος που λαμβάνει η εφαρμογή: μόνο το callback όταν το περνάτε, αλλιώς όλους. Επιστρέφει true όταν αφαίρεσε κάτι και false όταν δεν υπήρχε τίποτα προς αφαίρεση.

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