Node.js RxJS.fromWebSocket与Socket.io
我正在尝试使用Rx.DOM.fromWebSocket和Socket.io创建一个主题。我真的迷路了-在哪里可以找到Socket.io实现的协议Node.js RxJS.fromWebSocket与Socket.io,node.js,sockets,websocket,rxjs,Node.js,Sockets,Websocket,Rxjs,我正在尝试使用Rx.DOM.fromWebSocket和Socket.io创建一个主题。我真的迷路了-在哪里可以找到Socket.io实现的协议 var rxSocket = Rx.DOM.fromWebSocket( 'ws://localhost:12345', 'ws', function (e) { console.log('Opening'); }); rxSocket.subscribe(fun
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,但不知道在哪里可以找到socket.io的socket协议实现。socket.io不提供websockets,它提供“websockets”,websockets(如果有),但如果没有,它会后退,即使它建立了websocket连接,也不会发送rxSocket期望的消息。如果您想使用Rx.DOM.fromWebSocket,您应该简单地使用ws模块
因此,选择:
- RX.DOM.formWebSocket+ws(只支持真正的WebSocket,但要让事情变得美好)
- socket.io+hacks(全浏览器/“有用的”代理支持,但笨重)
var socket = io('ws://localhost:8080');
var dataStream = Rx.Observable.fromEvent(socket, 'data');
dataStream.subscribe(function(payload) {
console.log(payload);
});
在本例中,允许socket.io处理连接
RxJs处理事件并创建一个可观察的流以供订阅。我知道Shamless自我提升,但我为此提出了建议。有了它,你真正需要做的就是:
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);
});
是的,我认为这与回退有关,但我认为如果显式声明,它将能够使用ws-connection。谢谢你的回答。当我实现了一个原始WS时,向上投票并用我自己的答案回答。编辑:您是否有一个示例说明Socket.io的“笨拙”实现是什么样子的?基本上只需使用io.connect(),然后将事件发布到RX@Apansson只需将websocket API替换为
socket.io
API(即将.addEventListener(…)
替换为.on(…)
,替换事件名称等),使用可观察。创建
而不是匿名可观察
,使用观察者。创建
而不是观察者创建
。遵循这个公式并使其与socket.io
一起工作是相当简单的。