【问题标题】:RxJS: Observable.webSocket() get access to onopen, onclose…RxJS:Observable.webSocket() 访问 onopen、onclose…
【发布时间】:2018-05-13 03:01:35
【问题描述】:
const ws = Observable.webSocket('ws://…');
ws.subscribe(
  message => console.log(message),
  error => console.log(error),
  () => {},
);

我想观察我的 WebSocket 与 RxJS 的连接。通过订阅可观察的作品来对 onmessage 事件做出反应,就像魅力一样。但是如何访问 WebSocket 的onopen 事件呢?是否可以触发 WebSocket .close() 方法? RxJS 对我来说很新,我研究了几个小时,但也许我只是不知道正确的术语。提前致谢。

【问题讨论】:

    标签: javascript websocket rxjs rxjs5


    【解决方案1】:

    查看sourcecode of the Websocket 有一个配置对象WebSocketSubjectConfig,其中包含可以链接到不同事件的可观察对象。您应该能够将 NextObserver 类型的对象传递给配置值 openObserver,如下所示:

    const openEvents = new Subject<Event>();
    const ws = Observable.webSocket({
      url: 'ws://…', 
      openObserver: openEvents 
    });
    
    openEvents
      .do(evt => console.log('got open event: ' + evt))
      .merge(ws.do(msg => console.log('got message: ' + msg))
      .subscribe();
    

    【讨论】:

    • 谢谢!你的解释让我更清楚了一些事情。
    【解决方案2】:

    @Mark van Straten 到该文件的链接已失效。更新后的链接是here。我还想强调文档中建议的用法。我认为更好的复制和粘贴解决方案:

    import { webSocket } from "rxjs/webSocket";
    
    webSocket({
      url: "wss://echo.websocket.org",
      openObserver: {
        next: () => {
          console.log("connection ok");
        },
      },
      closeObserver: {
        next(closeEvent) {
          // ...
        }
      },
    }).subscribe();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多