joker-core
v2.0.1
Published
Простая и гибкая Singleton реализация для SignalR соединения. Обеспечивает единственное активное соединение независимо от количества попыток инициализации из разных модулей.
Downloads
35
Readme
SignalR Singleton Connection
Простая и гибкая Singleton реализация для SignalR соединения. Обеспечивает единственное активное соединение независимо от количества попыток инициализации из разных модулей.
Принципы дизайна
✅ Минимальная логика внутри - только core функциональность SignalR
✅ Без привязки к фреймворкам - работает с любой архитектурой
✅ Вся бизнес-логика снаружи - разработчик сам управляет токенами и состоянием
✅ Простые подписки - только возможность подписаться на события
Проблема
Когда несколько проектов или модулей создают SignalR соединение в одном приложении, создается множество соединений. Singleton решает эту проблему.
Базовое использование
import { getSignalRConnection } from './src/index';
// Первый модуль
const signalr1 = getSignalRConnection(() => {
console.log('Module 1 connected');
}, 'backendUrl');
// Второй модуль - получит тот же экземпляр
const signalr2 = getSignalRConnection(() => {
console.log('Module 2 connected');
});
console.log(signalr1 === signalr2); // true - один объект!Интеграция с существующим кодом
Использование с любой архитектурой:
// С Reatom
export const createSignalrConnectionAsync = action(async (ctx) => {
const connection = getSignalRConnection(() => {
connectSignalrAuthAction(ctx);
connectSignalrNotifications(ctx);
// ваша логика...
}, 'backendUrl');
signalrConnectionAtom(ctx, connection);
}, 'createSignalrConnectionAsync');
// С Redux
const connectSignalR = () => (dispatch) => {
const connection = getSignalRConnection(() => {
dispatch(signalRConnected());
// ваша логика...
}, 'backendUrl');
dispatch(setSignalRConnection(connection));
};
// С обычным JavaScript
const initSignalR = () => {
const connection = getSignalRConnection(() => {
console.log('Connected!');
// ваша логика...
}, 'backendUrl');
return connection;
};API
getSignalRConnection(callback?: () => void, backendUrl?: string): SignalrConnection
Основная функция для получения Singleton экземпляра.
callback- функция, вызываемая после подключения (опциональный)backendUrl- ссылка на бэкенд (опциональный), при первоим использовании функции - обязательный
SignalrConnection.getInstance(callback?: () => void): SignalrConnection
Альтернативный способ получения экземпляра.
Методы экземпляра
on<T>(event: string, callback: (...args: T[]) => void)- подписка на событияoff<T>(method: string, callback: (...args: T[]) => void)- отписка от событийinvoke(method: string, ...args: unknown[])- вызов методов на сервереsetTokens(accessToken: string | null, refreshToken: string | null)- установка токеновstartConnection()- запуск соединенияstopConnection()- остановка соединенияcreateConnection()- создание нового соединенияaddInitCallback(callback: () => void)- добавление callback к инициализации
Что НЕ делает библиотека
❌ Не управляет токенами авторизации
✅ Автоматически генерирует device token если его нет в localStorage и регистрирует его в системе
❌ Не привязана к конкретным фреймворкам
❌ Не содержит бизнес-логику
Вся бизнес-логика остается в вашем приложении - библиотека предоставляет только Singleton обертку с автогенерацией device token.
Требования
@microsoft/signalr- на первый
getSignalRConnectionнужно обязательно передатьbackendUrl
