如何使用rxjs从websocket连接创建一个observable

时间:2018-01-18 23:03:20

标签: node.js websocket rxjs

我正在尝试从rxjs中的websocket连接创建一个observable,但是在nodejs中没有任何关于它的好文档。

我找到的每个示例代码似乎都不起作用。 以下是我最近的尝试

并且失败

ReferenceError:未定义WebSocket

知道什么是错的,或者我在哪里可以找到节点中的实际工作示例?

import * as Rx from 'rxjs/Rx'
import * as Rxdom from 'rx-dom'
const { WebSocketSubject } = require('rxjs/observable/dom/WebSocketSubject');
const WebSocket = require('ws')

const ws = new WebSocket('ws://www.host.com/path')


let openObserver = Rx.Observable.create(() => {
  console.info('socket open')
  socket.onNext('test')
})

let closingObserver = Rx.Observable.create(() => {
  console.log('socket is about to close');
})

socket = Rxdom.DOM.fromWebSocket(
  'ws://www.host.com/path',
  null,
  openObserver,
  closingObserver
)

socket.subscribe(
  msg => console.log(msg),
  err => console.log(err),
  () => console.log('complete')
)

1 个答案:

答案 0 :(得分:2)

您正在尝试将前端和后端技术结合起来。如果你想在节点中使用RXJS,请查看Richard Szalay here接受的答案,他只是解释说rs-node是rxjs的包装器,用于rxjs上特定于节点的用途。他还链接到rx-node npm包。

但是为了让你开始,我会简单地做前端方法。

另请注意,您正在尝试使用rx-dom,这是用于客户端实现。

为简单起见,您需要按照guidlines使用rxjs。

让您入门所需的组件:

<script src="rx.js"></script>// In the html
----------------------
// js file or script
var Rx = require('rx');

let openObserver = Rx.Observer.create(() => {// change Observable to Observer
    console.info('socket open')
    socket.onNext('test')
})

let closingObserver = Rx.Observer.create(() => {// change Observable to Observer again
    console.log('socket is about to close');
})

socket = Rx.DOM.fromWebSocket(//Change to use Rx instead of Rxdom
    'ws://www.host.com/path',
    null,
    openObserver,
    closingObserver
)

socket.subscribe(
    msg => console.log(msg),
    err => console.log(err),
    () => console.log('complete')
)

有许多实现,但总体设计是相同的。试试这个,看看你是否还有其他错误。