Node.js Adonis:如何将多个控制器附加到一个 websocket 通道?

Node.js Adonis: how to attrach multiple controllers to only one websocket channel?

我有一个简单的项目,基于名为 "Adonis" 的 Node.js 框架。我想使用这个框架创建一个更简单的多人游戏。我创建了一个 websocket 通道,可以在玩家和服务器之间发送和接收数据。然后我将新的控制器连接到这个频道:

const Ws = use('Ws')
Ws.channel('channelName', 'channelNameController')

问题是,用户发送的数据非常多样化。玩家可以执行各种动作。 (例如,玩家可以攻击另一个玩家,他们可以从另一个玩家那里买东西,他们可以在棋盘上移动等)。

我想只保留一个打开的套接字通道,以简化连接。但是,我需要在唯一的一个控制器中处理来自玩家的所有数据。

是否可以使用 Adonis 框架将多个控制器附加到一个 websocket 通道?

如果不可能,我需要在控制器中用一种方法处理所有可能的玩家操作:

(伪代码)

onMessage(message) {
  switch message.type:
   case 'player-moved':
     // do something...
     break;
   case 'player-attack':
     // do something...
     break;
 //...
 }

简而言之

我认为您不能将多个控制器附加到一个网络套接字通道。 然而,你想在这里做的事情似乎是可行的,就像你在你的伪代码中所做的那样,或者更确切地说,通过发送不同的事件(我会推荐)。

客户

socket.emit('attack', {player: foo, force: bar})
...
...
socket.emit('buy', {player: foo, item: 25}

服务器

onAttack(data){
  doSomethingWith(data);
}

onBuy(data){
  doSomethingElseWith(data);
}