rxjs websocket:不返回ping

时间:2018-08-28 06:08:19

标签: angular websocket rxjs angular6 rxjs6

使用rxjs和angular6。我看到的答案中有95%仅使用旧版本的rxjs。

我要连接的服务器在连接启动期间需要有效的jwt令牌作为cookie。服务器响应101交换协议后,立即发出{ "status": "OK" }

握手的下一部分是让客户端(我正在写)发送{ "sessionId": "xxyyzz" }。服务器用另一个{ "status": "OK" }进行响应,然后开始发出事件。

或者至少应该如此?

我收到第一条{ "status": "OK" }消息,发送sessionId和userId,第二条{ "status": "OK" }通过。

我是rxjs和observables的新手,所以我想知道我的设置是否不正确。如果我发送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;
            }
        );
    }

1 个答案:

答案 0 :(得分:0)

我对您的后端一无所知,但也许您应该对要发送的数据进行字符串化处理。通过订阅收到的所有内容都会自动解析。

this.subject.next(JSON.stringinfy(...));

请参阅此页面(“将消息推送到服务器”):https://rxjs-dev.firebaseapp.com/api/webSocket/webSocket