我正在尝试使用带有 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 处理事件并创建要订阅的可观察流。
提供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);
});