我正在实施一个在线多人游戏,它将通过socket.io接收来自客户的连接。
我不确定在服务器中处理事件的位置 - 无论是在套接字事件侦听器本身,还是应该将此逻辑推迟给动作创建者。
考虑到在许多情况下,从客户端套接字接收事件将从服务器端触发.emit
或.broadcast
,因此我需要访问{{1} }和socket
在任何函数处理它。
到目前为止我的解决方案:
商店创建者:
io
使用export default io => createStore(
combineReducers({
users,
tables,
games
}),
applyMiddleware(
thunk.withExtraArgument(io),
logger
)
);
创建存储作为额外的thunk参数,以便操作创建者可以io
个事件,将套接字事件处理程序绑定到io.emit
和store
,以便它们可以{ {1}},io
和dispatch
:
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
最后一段代码是我不确定应该在事件监听器或动作创建者中的代码。
答案 0 :(得分:-1)
在惯用的redux动作中,创作者应该是纯粹的(没有副作用),这意味着保持它们不受异步逻辑的影响。
我编写了中间件来配置连接和相应的调度操作。
我建议您查看其中一个库。既可以按原样使用,也可以用于如何实现自己的想法。与socket.io-redux一样。