私はRxJS 5とのWebSocket接続を設定する正しい方法についてのガイダンスを探しています。JSON-RPC 2.0を使用するWebSocketに接続しています。私はWSに要求を送信し、サーバからの関連する応答のObservableを返す関数を実行できるようにしたい。私はそうのように私の最初のWebSocketSubjectを設定RxJS5 WebSocketSubject - メッセージをフィルタリングして完成させるには?
:この観察できることから
const ws = Rx.Observable.webSocket("<URL>")
、私はws.next(myRequest)
を使用して要求を送信することができた、と私は応答がws`て戻って来るのを見ることができました観察可能である。
私は正しいレスポンスにwsレスポンスをフィルタリングして完了する関数の作成に苦労しました。これらはソースの件名を完成させるように見え、将来のすべてのリクエストを停止します。私は次のことを試してみました
function makeRequest(msg) {
// 1. send the message
// 2. return an Observable of the response from the message, and complete
}
:
function makeRequest(msg) {
const id = msg.id;
ws.next(msg);
return ws
.filter(f => f.id === id)
.take(1);
}
私はしかし、唯一の最初の要求が動作することを行うと
私の意図した出力のようなものです。それ以降のリクエストはうまくいかず、take(1)
で完了していると思いますか?
このような状況に適したアーキテクチャについて考えていますか?
takeオペレータは実際にシーケンスを完了します。なぜ最初にそれを置いたのですか? – Meir
こうすると、それぞれのリクエストには1つの一致するレスポンスしかありません。何度もやり直すことのないIDのすべての要求をチェックし続けるのではなく、このIDが戻ったらすぐにチェックしたいと思います。私はtake()がこのシーケンスを閉じるだろうと考えましたが、websocketトラフィックで観測可能なソースはありませんでした。 それは意味がありますか?このシナリオを構成する正しい方法に関するアイデアはありますか? – skokenes
makeRequestがサーバーにリクエストを送信していることを確認するには?意味は実際にはinvokeServerRequestですか? – Meir