RxJS:Observable.webSocket() 可以访问 onopen、onclose…

mac*_*oft 2 javascript websocket rxjs rxjs5

const ws = Observable.webSocket('ws://…');
ws.subscribe(
  message => console.log(message),
  error => console.log(error),
  () => {},
);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ten 5

查看Websocket源代码,有一个配置对象WebSocketSubjectConfig,其中包含可以链接到不同事件的 observable。您应该能够像这样将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();
Run Code Online (Sandbox Code Playgroud)


Yan*_*ann 5

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

import { webSocket } from "rxjs/webSocket";

webSocket({
  url: "wss://echo.websocket.org",
  openObserver: {
    next: () => {
      console.log("connection ok");
    },
  },
  closeObserver: {
    next(closeEvent) {
      // ...
    }
  },
}).subscribe();
Run Code Online (Sandbox Code Playgroud)