Rxjs 从服务器订阅事件流

Rxjs 从服务器订阅事件流,rxjs,redux-observable,Rxjs,Redux Observable,我正在扩展redux observable的乒乓球示例,我的最终目标是对从服务器收到的每个事件发送操作 但我在思考如何真正做到这一点时遇到了一些困难 到目前为止,我所拥有的: 1.打开连接后,我的服务器开始发送消息 // server.js setInterval(()=>{ ws.send(JSON.stringify({ type: 'INCREMENT', status: 200 })) console.log("sent so

我正在扩展redux observable的乒乓球示例,我的最终目标是对从服务器收到的每个事件发送操作

但我在思考如何真正做到这一点时遇到了一些困难

到目前为止,我所拥有的:

1.打开连接后,我的服务器开始发送消息

// server.js
setInterval(()=>{
    ws.send(JSON.stringify({
        type: 'INCREMENT',
        status: 200
    }))
    console.log("sent some data")
},3000)
二,。在客户端上,我已经建立了Websocket连接的可观察性

const socket$ = Observable.webSocket("ws://localhost:8081")
代码的其余部分与


如何为这项任务形成史诗?如何分派操作?

我们在评论中讨论了一些,但恐怕我还不完全清楚增量/计数器/增量应用与套接字的关系,但我可以为您提供一个简单的示例:

const somethingEpic = action$ =>
  action$.ofType('START_SOCKET_OR_WHATEVER')
    .switchMap(action =>
      Observable.webSocket('ws://localhost:8081')
        .map(response => ({ type: 'RECEIVED_MESSAGE', paylod: response }))
    );
在这里,当
START\u SOCKET\u或任何调度的
被调度时,我们将开始监听我们的SOCKET。无论何时收到一条消息,我们都会将其映射为一条
received_message
动作,该动作将在epic发出消息后发送


您会注意到,这与使用单个ajax的方式几乎相同。只有当您需要向服务器发送消息或多路传输时,情况才会明显不同。

@eenagy这是rxjs v4 btw,对v5Hey@N3U3W3来说并不准确。您的问题不清楚。你能修改一下吗?@jayphelps,当然。基本上,我需要我的应用程序做以下工作:1。打开一个通过websocket连接到服务器的应用程序,该应用程序将创建该websocket连接的可观察状态。2.服务器向任何连接的用户发送无限“增量”消息。3.收到每条消息后,必须发送一个操作。因此,如果我的
state.counter
为零,那么在接收到事件时,它必须变为1,2,3。那么,您能描述一下websocket是如何与这个epic交互的吗?你需要通过插座发送东西吗?把东西收回来?仅从服务器侦听?你需要多路传输还是只需要一个频道?非常感谢,@jayphelps,这正是我想要的行为。我刚刚检查了它,它按预期工作-我通过调度
SOCKET\u START
操作打开连接,在调度操作后,我的应用程序开始从服务器接收ping并增加计数器值woohoo!真高兴@jayphelps我不认为您能够另外为我指出正确的方向,也可以监听套接字故障/关闭事件?例如,一个
{type:'SOCKET_CLOSED'}
@JoshMc webSocket主题将根据它是否是完全关闭的订阅服务器来选择complete()或error()。您还可以提供closeObserver。如果您想要更具体的帮助,比如如何将其转化为您发出的redux操作,那么最好创建一个新的stackoverflow问题来描述您的需求。希望这有帮助@jayphelps谢谢你的帮助,我尝试了一下,但没能走多远,今晚晚些时候会再尝试一次,但同时我在这里提出了一个问题: