tpu*_*nen 3 django amazon-web-services websocket django-rest-framework django-channels
我的游戏应用程序使用带有 DRF 的 Vue 前端和 Django 后端。多个客户端连接到同一个游戏会话。有时,某些用户所做的某些事情也必须反映给其他用户。为此,服务器必须具有请求客户端刷新数据的方法。
Django 应用程序部署在 Elastic beanstalk 上。典型的游戏会话有 10 个玩家,更新请求每 15 秒发送一次给玩家,我不相信在可预见的未来我们会同时有超过 50 个游戏,因此性能要求很低。
我正在寻找一个简单的解决方案来将更新请求消息推送到客户端。
我当前的解决方案使用运行在 ec2 上的 Redis 服务器。当 Django 视图发生变化时,Django 向 Redis 发布更新请求:
r = redis.Redis(host=settings.REDIS_IP, port=6379, db=0)
r.publish(game_identifier, type)
Run Code Online (Sandbox Code Playgroud)
“类型”包含应该更新哪种数据的信息。
此外,我还实现了一个简单的 Node 应用程序。所有客户端都使用 Websocket 连接到此应用程序。该应用程序也是 Redis 的订阅者,每当有通知时,它就会使用他们的游戏标识符作为频道向订阅者发出通知。在此之后,客户端使用 REST 刷新它们的状态。Node 应用程序也在 Elastic Beanstalk 上运行。
一切正常,但拥有一个 Elastic Beanstalk 应用程序和一个仅用于向客户端发送简单通知的 ec2 实例似乎有点矫枉过正。我很想听听如何用较少的移动部件构建这个简单的通知。如果后端是使用 Node 构建的,我只需几行代码就可以做到这一点。
一些可能性/问题:
为了模块化、可伸缩性和可重用性,最好让通知服务器单独存在。但是如果你坚持使用单个服务器,你可以使用 Django 通道代替 Node 服务器和 Redis 实例作为通道层,这样你就可以在与 DRF 应用程序相同的代码库中使用它。已经有几个库集成了 DRF 和 Channels。我使用这个DjangoChannelsRestFramework
归档时间: |
|
查看次数: |
7124 次 |
最近记录: |