Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js RxJS.fromWebSocket与Socket.io_Node.js_Sockets_Websocket_Rxjs - Fatal编程技术网

Node.js RxJS.fromWebSocket与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

我正在尝试使用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。我试过用谷歌搜索socket.io,但不知道在哪里可以找到socket.io的socket协议实现。

socket.io不提供websockets,它提供“websockets”,websockets(如果有),但如果没有,它会后退,即使它建立了websocket连接,也不会发送rxSocket期望的消息。如果您想使用Rx.DOM.fromWebSocket,您应该简单地使用ws模块

因此,选择:

  • RX.DOM.formWebSocket+ws(只支持真正的WebSocket,但要让事情变得美好)
  • socket.io+hacks(全浏览器/“有用的”代理支持,但笨重)

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

我知道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
一起工作是相当简单的。