Use cases/WebSocket basic — входящие и исходящие сообщения
Use cases · 44 学
WebSocket basic — входящие и исходящие сообщения
Паттерн
WebSocket — двунаправленный канал. Subscribe — это «слушать сервер». Next в socket — это «отправить серверу». Не путать с HTTP, где запрос/ответ строго один к одному.
Какую проблему решаем
Callback API socket.on('message', ...) и socket.send(...) разрастается по обработчикам компонента, плохо очищается при destroy, и легко получить «зомби-listener» после ухода со страницы.
Операторы и зачем они нужны
Subject симулирует duplex-канал: subscribe для входящих, next для исходящих.
В реальности используйте webSocket из rxjs/webSocket — даёт ровно такую же модель с socket.next(command).
Подводные камни
HTTP complete сам, WebSocket — нет. Может жить часами и требует явного teardown и reconnect.
Не создавайте новый socket на каждый subscribe в компоненте. Один socket в singleton service, компоненты подписываются на derived streams.
Ошибки socket нельзя глотать. Нужен либо reconnect, либо явный offline-state в UI.
Что в итоге получаем
Incoming и outgoing стороны канала явно разделены. Легко тестировать каждую отдельно.