我正在基于 websockets 在 Node.js/Express 中编写一个应用程序。我将 Node 的 EventEmitter 与 socket.io 结合使用,用于几乎完全由事件驱动的应用程序。
我想知道这是否是一个很好的架构。我的主套接字现在在 app.js 中管理,代码如下:
socket.on(Events.InitialFetch, function(battle_id){
dispatcher.emit(Events.InitialFetch, battle_id);
});
dispatcher.on(Events.InitialFetched, function(data){
socket.emit(Events.InitialFetched, data);
});
...在我的控制器中,我有这样的代码:
dispatcher.on('initial-fetch', function(data){
Battle.findOne({_id: data})
.populate('players')
.populate('owner')
.exec(function(err, battle){
if (err) {
}
else {
dispatcher.emit(Events.InitialFetched, battle);
}
});
});
而不是正常的 RESTful 路由。我担心的是它有点令人困惑(即描述数据流的'fetch'和'fetched')以及我基本上将方法从一种类型的事件发射器(socket.io)传递给另一种(Event.EventEmitter) .
如何更好地构建它?让控制器直接访问套接字而不是使用 EventEmitter 作为总线会更好吗?如何使我的活动名称更清晰?