Использование rxjs и angular 6. 95% ответов, которые я видел, используют только более старые версии rxjs.
Серверу, к которому я подключаюсь, требуется действительный токен jwt в качестве файла cookie во время установления соединения. Как только сервер отвечает 101 протоколом коммутации, он немедленно отправляет { "status": "OK" }
.
Следующая часть рукопожатия для клиента (то, что я пишу), чтобы отправить { "sessionId": "xxyyzz" }
. Сервер отвечает другим { "status": "OK" }
и затем начинает отправлять события.
Или, по крайней мере, так должно быть?
Я получаю первое { "status": "OK" }
сообщение, отправляю sessionId и userId, и второе { "status": "OK" }
приходит.
Я новичок в rxjs и наблюдаемых, поэтому мне интересно, если мои настройки неверны. Если я отправляю ping, браузер показывает отправляемую рамку ping, но он не отвечает (Реализация на стороне сервера работает - коллеги подключаются через Android и т. Д., Просто отлично).
Является ли subject.next("ping")
даже правильным методом? Я просто хожу по кругу и буду признателен за любую проницательность.
subject: WebSocketSubject<any>;
connectAttempted: boolean;
connected: boolean;
connect(sessionId, userId) {
this.subject = webSocket({
url: `wss://remote.api.server/stream`
});
this.subject.subscribe(
(msg) => {
if(msg.status && msg.status == "OK" && !this.connectAttempted) {
this.subject.next(
{
sessionId: sessionId,
userId: userId,
eventClasses: []
}
);
this.connectAttempted = true;
} else if(msg.status && msg.status == "OK" && !this.connected) {
console.log("Handshake completed");
this.connected = true;
this.subject.next("ping");
} else if(msg.status && msg.status == "FAIL") {
this.connected = false;
console.log("FAIL! No longer connected");
} else {
console.log("Something other than status", JSON.stringify(msg))
}
},
(err) => {
console.log('error', err)
},
() => {
console.log('complete?')
this.connected = false;
this.connectAttempted = false;
}
);
}