RxJS.fromWebSocket 和 Socket.io

RxJS.fromWebSocket with Socket.io

我正在尝试使用 Rx.DOM.fromWebSocket 和 Socket.io 创建主题。我真的迷路了 - 我在哪里可以找到 Socket.io 实现的协议?

var rxSocket = Rx.DOM.fromWebSocket(
        'ws://localhost:12345',
        'ws',
        function (e) {
            console.log('Opening');
        });

rxSocket.subscribe(function (next) {
    console.log('Received data: ' + next);
});

rxSocket.onNext('data');

这就是我现在得到的。我正在尝试在本地连接到运行 Socket.io 的服务器。当我刚刚使用标准 io.connect() 时,一切运行顺利,所以我的服务器已启动并运行 Socket.io。我试过 Google 但不知道在哪里可以找到 Socket.io.

的套接字协议实现

Socket.io 不提供 websockets,它提供 'websockets',websockets 如果可用但回退,即使它建立了 websocket 连接它也不会发送 rxSocket 的那种消息去期待。如果你想使用 Rx.DOM.fromWebSocket 你应该简单地使用 ws 模块。

所以选项:

  • RX.DOM.formWebSocket + ws(仅支持真正的 websockets,但让事情变得美好)
  • socket.io + hacks(完整的浏览器/'helpful'代理支持,但笨拙)

另一种方法是使用 RxJS Observable.fromEvent。

var socket = io('ws://localhost:8080');

var dataStream = Rx.Observable.fromEvent(socket, 'data');

dataStream.subscribe(function(payload) {
  console.log(payload);
});

在此示例中,允许 socket.io 处理连接。

RxJs 处理事件并创建一个 Observable 流来订阅。

无耻的自我推销,我知道,但我 rxjs-socket.io 正是为了这个目的。有了它,您真正需要做的就是:

import {IO, ioEvent} from 'rxjs-socket.io'

const socket = new IO();
const onHelloWorld = new ioEvent({name: "hello-world", once: false, count: 0});

socket.listenToEvent(onHelloWorld);
socket.connect('http://localhost:1337');

onHelloWorld.event$.subscribe((state) => {
    console.log('new state', state);
});