Interface: TransportDriver
Абстрактный Transport Driver API
Описывает все, что способно отправлять сообщения и подписываться на входящие сообщения (например udp сокет). Вопреки некоторым сложностям, связанным с невозможностью отслеживать получения сообщений, это самый простой подход к двунаправленной отправке сообщений, который может быть имплементирован с помощью любого вида сокетов, http+sse и т.д.
Пример
// Серверная сторона
async (transport: TransportDriver) => {
const subscription = transport.on({ room: '323-123-45' }, ({ topic }, data) => {
expect(topic).toBe('hello');
expect(data).toStrictEqual({ woo: 'hoo' });
});
// имплементация
transport.off(subscription);
};
// Клиентская сторона
async (transport: TransportDriver) => {
await transport.send({ room: '323-123-45', topic: 'hello' }, { woo: 'hoo' });
};
Методы
off
▸ off(id
, data?
): void
Отменяет существующую подписку.
Не отрабатывает, если с данным id нет связанной подписки.
Если текущий подписчик ждет сообщения, можно использовать необязательное поле data?
для решения этой проблемы.
Параметры
Имя | Тип | Описание |
---|---|---|
id |
string |
идентификатор подписки, возвращается после создания |
data? |
unknown |
(опционально) данные сообщения к отправке для коллбэка текущего подписчика |
Возвращает
void
on
▸ on(filter
, callback
): string
Подписывается на определенные сообщения
Возможна подписка на одни и те же сообщения дважды, что может быть использовано в продвинутых стратегиях фильтрации сообщений
Параметры
Имя | Тип | Описание |
---|---|---|
filter |
Partial <TransportMeta > |
фильтр входящего сообщения |
callback |
TransportCallback |
callback, вызывающийся когда сообщение будет соответствовать фильтру |
Возвращает
string
идентификатор подписки, может быть использован для отмены подписки
send
▸ send(meta
, data
): Promise
<void
>
Отправка сообщения с помощью транспорта
Этот метод ожидает, пока сообщение будет отправлено (но не дожидается получения) и отдает в ответ возможна ли его отправка. Можно определить пункт назначения и способ отправки.
Параметры
Имя | Тип | Описание |
---|---|---|
meta |
TransportMeta |
идентификаторы сообщения |
data |
unknown |
данные сообщения |
Возвращает
Promise
<void
>