django-channels 是否适合实时游戏?

Is django-channels suitable for real time game?

我想做一个实时游戏,我想用 NodeJS-SocketIO 或 aiohttp,直到我遇到了 django-channels,然后我阅读了它的文档。

这是一个很好的模块

问题:

  1. django-channels 是否适合实时游戏?
  2. django-channels 比 aiohttp/nodejs-socketio 有优势吗?
  3. 是否适合所有客户端(android、IOS、桌面)?

首先,通道不过是一个异步任务队列。它与芹菜非常相似,主要区别在于性能和可靠性。 通道比芹菜快,但芹菜更可靠。为了向其添加更多上下文,通道仅执行一次任务(无论它是失败还是成功)。另一方面,celery 执行任务直到任务失败一定次数或成功。

现在,开始回答您的问题并举个例子。

Suppose you were to build clash of clans using channels & web-sockets.

1) 是的,通道适合实时游戏,只要你为异步队列中的任务失败的情况编写自定义逻辑。

网络套接字将通过通道发送和接收消息。因此,如果其中一名玩家在战场上部署部队的请求没有成功发送到服务器,您需要编写自定义逻辑来处理这种情况(比如在将请求转出之前至少尝试 3 次)任务队列)。

2) 不是真的。它们几乎相同。最终,您将不得不使用网络套接字和队列,您可以在其中同时 fire/receive 消息。

3) 是的,您必须在您的应用程序(android、iOS、桌面)中实现一个网络套接字,这将 send/receive来自后端的消息。