Есть ли в koa аналог app.set экспресса (что-то, что-то)? - PullRequest
0 голосов
/ 01 октября 2019

Мне нужен экземпляр socket.io в нескольких местах моего приложения. Чтобы добиться этого в экспресс, я могу сделать это:

app.set('io', io);

В Коа сейчас у меня есть это:

app.use( async ( ctx, next ) => {
   ctx.io = io;
   await next();
 });

Это работает, но это промежуточное ПО выполняется каждый раз, когда мой сервер получает запрос. Есть лучший способ сделать это?

1 Ответ

0 голосов
/ 01 октября 2019

Я не знаю, как вы полностью реализуете, но есть пара вещей, которые вы можете сделать: вы можете передать дополнительный аргумент и обновить соединение до веб-сокета, который обойдет остальные промежуточные программы. Или, что я делаю лично, так это просто подключаю веб-сокет к другой конечной точке. Это поможет с любыми будущими проблемами масштабируемости. Например, если вам нужно создать кластеры на вашем сервере, вы также получите больший контроль, что облегчит вам тестирование вашего бэкенда. Это то, что я бы сделал по крайней мере. Моя внутренняя часть socket.io выглядит следующим образом:

server.ts

о да, я использую машинопись в серверной части

require('dotenv').config({ path: __dirname + '/.env' });
import Koa from 'koa';
const koa = new Koa();
import cors from '@koa/cors';
const PORT = process.env.CHAT_PORT || 3000;
const ENV = process.env.NODE_ENV || 'development';
const server = require('http').createServer(app, { origins: 'http://server.ip' });
const io = (module.exports.io = require('socket.io')(server));
import SocketManager from './lib/SocketManager';
app.use(
  cors({
    origin: '*',
    optionsSuccessStatus: 200,
  }),
);

// server setup
server.listen(PORT, (err: ErrorEvent): void => {
  if (err) console.error('❌ Unable to connect the server: ', err);
  console.log(`? Chat server listening on port ${PORT} - ${ENV} environment`);
});

io.on('connection', SocketManager);

затем просто создайте менеджер сокетов, который импортирует экземпляр io, и тогда вы сможете обрабатывать все соединения.

Я надеюсь, что это ответ, который вы искали / дал вам лучшее понимание.

...