缩放¶
根据您的要求,您的Feathers应用可能需要提供高可用性.Feathers旨在扩展.
Feathers应用程序中使用的传输类型将影响缩放配置.例如,仅使用 feathers-rest 适配器的Feathers应用程序将需要较少的缩放配置,因为HTTP是无状态协议.如果通过 feathers-socketio 或 feathers-primus 适配器使用websockets(有状态协议),配置可能会更复杂,以确保websockets正常工作.
群集配置¶
簇 support内置于核心NodeJS中.由于NodeJS是单线程的,因此集群允许您在多个子进程(和多个线程)之间轻松分发应用程序请求.在多核环境中运行Feathers时,群集是一个不错的选择.
下面是使用 feathers-socketio 提供程序向 Feathers 添加聚类的示例.默认情况下, websocket连接通过多个HTTP请求的握手开始, 并升级到websocket协议.但是, 启用群集时, 同一工作程序将不会处理握手的所有HTTP请求, 从而导致HTTP 400错误.为确保握手成功, 强制单个工作人员通过禁用http传输并专门使用 websocket 传输来处理握手.
禁用websockets的HTTP传输时需要注意很明显的副作用.虽然所有现代浏览器都支持websocket连接,但是没有websocket支持 IE <= 9 和 Android Browser <= 4.3. 如果您必须支持这些浏览器,请使用其他缩放策略.
import cluster from 'cluster';
import feathers from '@feathersjs/feathers';
import socketio from '@feathersjs/socketio';
const CLUSTER_COUNT = 4;
if (cluster.isMaster) {
for (let i = 0; i < CLUSTER_COUNT; i++) {
cluster.fork();
}
} else {
const app = feathers();
// ensure the same worker handles websocket connections
app.configure(socketio({
transports: ['websocket']
}));
app.listen(4000);
}
在您的Feathers客户端代码中,将 socket.io-client 限制为 websocket transport 并禁用 upgrade.
import feathers from '@feathersjs/client';
import io from 'socket.io-client';
import socketio from 'feathers-socketio/client';
const app = feathers()
.configure(socketio(
io('http://api.feathersjs.com', {
transports: ['websocket'],
upgrade: false
})
));