realtime
realtime意味著什么
realtime意味著,當一個 create,update,patch或 remove 的服務方法完成時,services會自動發(fā)送created,updated,patched 或 removed 事件。客戶端可以偵聽到這些事件并作相應處理。
當請求被服務處理完,相應的事件會發(fā)射出去。
Feathers 的websocket并不是只用來在服務端和客戶端間發(fā)送事件,也可以用來在服務器和服務期間或服務器和客戶端間調(diào)用服務方法或發(fā)送數(shù)據(jù)。這比REST API要快。
目前Feathers支持兩個websocket傳輸庫,socket.io 與 Primus。
Socket.io
1.安裝。
$ npm install feathers-socketio
它支持實時雙向、基于事件的通信,可用在多個平臺、瀏覽器或設(shè)備,均衡速度和可靠性。
2.服務端。
一旦調(diào)用app.listen(),可以用過app.io()獲取Socket.io對象。著這個地方可以方便地監(jiān)聽自定義事件或者添加認證。
const feathers = require('feathers');
const socketio = require('feathers-socketio');
const app = feathers()
.configure(socketio(function(io) {
io.on('connection', function(socket) {
socket.emit('news', { text: 'A client connected!' });
socket.on('my other event', function (data) {
console.log(data);
});
});
// Registering Socket.io middleware
io.use(function (socket, next) {
// Exposing a request property to services and hooks
socket.feathers.referrer = socket.request.referrer;
next();
});
}));
app.listen(3030);
中間件和服務參數(shù)。
和REST provider中間件相似,Socket.io 中間件可以修改Feathers關(guān)于socket的屬性,來作為服務的參數(shù)。
app.configure(socketio(function(io) {
io.use(function (socket, next) {
socket.feathers.user = { name: 'David' };
next();
}
app.use('messages', {
create(data, params, callback) {
// When called via SocketIO:
params.provider // -> socketio
params.user // -> { name: 'David' }
}
};
3.客戶端。[待補]
Primus
1.安裝。
$ npm install feathers-primus ws
2.服務端。
導入模塊,并把primus(configuration [, fn])傳到app.configure中。
const feathers = require('feathers');
const primus = require('feathers-primus');
const app = feathers().configure(primus({
transformer: 'websockets'
}));
app.listen(3030);
中間件和服務參數(shù)
類似于REST和SocketIO,Primus的請求對象也有一個可以在認證中被服務參數(shù)繼承的屬性。
app.configure(primus({
transformer: 'sockjs'
}, function(primus) {
// Do something with primus
primus.before('todos::create', function(socket, done){
// Exposing a request property to services and hooks
socket.request.feathers.referrer = socket.request.referrer;
done();
});
app.use('messages', {
create(data, params, callback) {
// When called via Primus:
params.provider // -> primus
params.user // -> { name: 'David' }
}
};
3.客戶端[待補]