RxJS.fromWebSocket with Socket.io



我正在尝试使用带有 Socket.io 的Rx.DOM.fromWebSocket创建一个主题。我真的很迷茫 - 我在哪里可以找到 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 启动并运行。我尝试谷歌,但不知道在哪里可以找到 Socket.io 的套接字协议实现。

另一种方法是使用 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 处理事件并创建要订阅的可观察流。

Socket.io 不

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

所以选项:

  • RX.DOM.formWebSocket + ws(只支持真正的websockets,但做得不错)
  • socket.io + hacks(完整的浏览器/"有用的"代理支持,但笨拙)

无耻的自我推销,我知道,但我为这个提议做了 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);
});

相关内容

  • 没有找到相关文章

最新更新