服务器中的Redux + socket.io - 业务逻辑是否属于事件侦听器或动作创建者?

时间:2017-06-02 17:27:53

标签: javascript node.js socket.io redux

我正在实施一个在线多人游戏,它将通过socket.io接收来自客户的连接。

我不确定在服务器中处理事件的位置 - 无论是在套接字事件侦听器本身,还是应该将此逻辑推迟给动作创建者。

考虑到在许多情况下,从客户端套接字接收事件将从服务器端触发.emit.broadcast,因此我需要访问{{1} }和socket在任何函数处理它。

到目前为止我的解决方案:

商店创建者:

io

使用export default io => createStore( combineReducers({ users, tables, games }), applyMiddleware( thunk.withExtraArgument(io), logger ) ); 创建存储作为额外的thunk参数,以便操作创建者可以io个事件,将套接字事件处理程序绑定到io.emitstore,以便它们可以{ {1}},iodispatch

getState

我的io.emit高阶函数返回传入连接的事件处理程序并注册先前声明的let store = createStore(io), //socket event handlers boundHandlers = [ tables, games, messages ].map(handler => handler(store, io)); io.on('connect', users(store, io, boundHandlers));

users

最后一段代码是我不确定应该在事件监听器或动作创建者中的代码。

1 个答案:

答案 0 :(得分:-1)

在惯用的redux动作中,创作者应该是纯粹的(没有副作用),这意味着保持它们不受异步逻辑的影响。

我编写了中间件来配置连接和相应的调度操作。

我建议您查看其中一个库。既可以按原样使用,也可以用于如何实现自己的想法。与socket.io-redux一样。