从服务器订阅事件流
Subscribe to a stream of events from server
我正在扩展 redux-observable 的 ping-pong 示例,我的最终目标是 对从服务器 接收到的每个事件调度一个动作。
但我在思考如何真正实现这一点时遇到了一些麻烦。
我目前拥有的:
1.Upon 打开连接我的服务器开始发送消息。
// server.js
setInterval(()=>{
ws.send(JSON.stringify({
type: 'INCREMENT',
status: 200
}))
console.log("sent some data")
},3000)
2。在客户端我已经建立了一个 Websocket 连接的 Observable。
const socket$ = Observable.webSocket("ws://localhost:8081")
类似
如何为这个任务创建史诗?我如何发送一个动作?
我们在评论中讨论了一些,但恐怕我仍然不完全清楚 increment/counter/INCREMENT_APPLY 与套接字的关系,但我可以给你一个简单的例子:
const somethingEpic = action$ =>
action$.ofType('START_SOCKET_OR_WHATEVER')
.switchMap(action =>
Observable.webSocket('ws://localhost:8081')
.map(response => ({ type: 'RECEIVED_MESSAGE', paylod: response }))
);
在这里,当 START_SOCKET_OR_WHATEVER
被调度时,我们将开始监听我们的套接字。每当收到一条消息时,我们都会将其映射到一个 RECEIVED_MESSAGE
动作中,该动作将在 epic 发出它之后进行分派。
您会注意到这与您执行单个 ajax 的方式几乎相同。如果您需要将消息发送到服务器或多路复用,它只会变得明显不同。
我正在扩展 redux-observable 的 ping-pong 示例,我的最终目标是 对从服务器 接收到的每个事件调度一个动作。
但我在思考如何真正实现这一点时遇到了一些麻烦。
我目前拥有的:
1.Upon 打开连接我的服务器开始发送消息。
// server.js
setInterval(()=>{
ws.send(JSON.stringify({
type: 'INCREMENT',
status: 200
}))
console.log("sent some data")
},3000)
2。在客户端我已经建立了一个 Websocket 连接的 Observable。
const socket$ = Observable.webSocket("ws://localhost:8081")
类似
如何为这个任务创建史诗?我如何发送一个动作?
我们在评论中讨论了一些,但恐怕我仍然不完全清楚 increment/counter/INCREMENT_APPLY 与套接字的关系,但我可以给你一个简单的例子:
const somethingEpic = action$ =>
action$.ofType('START_SOCKET_OR_WHATEVER')
.switchMap(action =>
Observable.webSocket('ws://localhost:8081')
.map(response => ({ type: 'RECEIVED_MESSAGE', paylod: response }))
);
在这里,当 START_SOCKET_OR_WHATEVER
被调度时,我们将开始监听我们的套接字。每当收到一条消息时,我们都会将其映射到一个 RECEIVED_MESSAGE
动作中,该动作将在 epic 发出它之后进行分派。
您会注意到这与您执行单个 ajax 的方式几乎相同。如果您需要将消息发送到服务器或多路复用,它只会变得明显不同。