realtime
realtime意味着什么
realtime意味着,当一个 create,update,patch或 remove 的服务方法完成时,services会自动发送created,updated,patched 或 removed 事件。客户端可以侦听到这些事件并作相应处理。
当请求被服务处理完,相应的事件会发射出去。
Feathers 的websocket并不是只用来在服务端和客户端间发送事件,也可以用来在服务器和服务期间或服务器和客户端间调用服务方法或发送数据。这比REST API要快。
目前Feathers支持两个websocket传输库,socket.io 与 Primus。
Socket.io
1.安装。
$ npm install feathers-socketio
它支持实时双向、基于事件的通信,可用在多个平台、浏览器或设备,均衡速度和可靠性。
2.服务端。
一旦调用app.listen(),可以用过app.io()获取Socket.io对象。着这个地方可以方便地监听自定义事件或者添加认证。
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);
中间件和服务参数。
和REST provider中间件相似,Socket.io 中间件可以修改Feathers关于socket的属性,来作为服务的参数。
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);
中间件和服务参数
类似于REST和SocketIO,Primus的请求对象也有一个可以在认证中被服务参数继承的属性。
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.客户端[待补]