WebSocketSubject - 优势?

时间:2017-09-08 14:26:08

标签: angular websocket rxjs

免责声明:我是网络开发的新手,所以请耐心等待......

Stack:Angular前端,Tornado(基于python)的后端Web服务器

基于这个非常受欢迎的教程,我已经成功地使用RxJs和WebSocket与后端进行通信:https://medium.com/@lwojciechowski/websockets-with-angular2-and-rxjs-8b6c5be02fac

我刚刚在RxJs 5中偶然发现了WebSocketSubject,我想知道它的优点是什么?

到目前为止,我已经能够使用它来连接,发送和接收,但是我无法弄清楚如何使用我在主题中获得的典型RxJs运算符...所以在某种程度上它只是似乎更难使用。

我错过了什么?

这是我正在使用的代码:

  //create the socket
  this.pubsubSubject = WebSocketSubject.create("ws://" + this.hostName + ":" + connection_info.port + "/" + connection_info.ps);

  //output a message when it's open
  this.pubsubSubject.openObserver = {
    next: value => {
      console.log("ps socket is " + (this.pubsubSubject.socket.readyState == WebSocket.OPEN ? "OPEN" : "NOT OPEN"));
    }
  }

  //send the authentication token through the socket
  this.pubsubSubject.next(JSON.stringify(authenticate_request));

//subscribe to specific events from server
var subscription = {
  "subscribe": events
}
this.pubsubSubject.next(JSON.stringify(subscription));

//start getting messages
this.pubsubSubject.subscribe(
  (msg: any) => {
    console.log("msg: " + msg);
  }
)

1 个答案:

答案 0 :(得分:2)

我认为我的困惑来自于对RxJs基础知识缺乏了解。但是,在这种情况下,我确实想出如何映射,如下所示:

  this.pubsubSubject
    .map((resp: IPubSubMessage): any => {
      console.log(resp.payload);

    }).subscribe();

对于那些特别需要有关WebSocketSubject的更多信息的人,您可以在这里查看代码中的注释:

https://github.com/mpodlasin/rxjs/blob/47ae8573256609492e16a957348883f0c8039c2e/src/observable/dom/WebSocketSubject.ts

我无法在其他地方找到这个细节,所以这可能是现在寻找的最好的地方。

很高兴让其他人知道更多信息。