移动设备上的Django实时访问

Sha*_*ram 2 django django-rest-framework

我是网络后端的新手。目前我正在使用 DjangoREST 框架,它正在满足我的期望,除了它不帮助实时通信。我不想使用firebase。换句话说,我想构建自己的后端,如 firebase,不是所有功能,而是至少在移动设备上实时访问。最近我发现了 Django Channels ,正如我所提到的,我没有服务器端开发的背景,所以我对此不太了解。

我只是想问 Django 是否可以通过 Django Channels 在移动设备上实时访问?我可以在 Django Channels 中做一些类似于 DjangoREST GET、PUT、POST 和 DELETE 的操作吗?

Rez*_*adi 5

如果你想用 django 来做,那么你没有太多选择。在我看来,这django-channels是最好的解决方案。django-channels用于处理 web-scoket、聊天和实时连接:

Django Channels 是一个项目,它采用 Django 并将其能力扩展到 HTTP 之外 - 处理 WebSockets、聊天协议、IoT 协议等。它建立在名为 ASGI 的 Python 规范之上。

您的 API 设计不会有什么不同。当然,您必须使用其他工具,而且您将无法获得某些选项django-rest-framework。但它是一个很好的图书馆,可以处理你的情况。

关于你的问题,是的,可以在任何你想要的地方处理它。几乎所有的浏览器都支持 websocket,几乎所有的移动编程语言都通过设计支持 web socket。(在此链接中阅读有关当前应用程序中的通信方法的更多信息:web-api-design-methods

当然,您将失去 django rest 中的一些功能,例如 serialziers,并且您将拥有不同的路由器和……此外,您只需要使用 websocket 通过消息发送数据,而无需使用 http 方法。因为它是花药协议(你可以ws://在它的 api 调用前面注意到它)

但请记住,您将面临一些挑战,django-channels例如:

  • 你需要一个 asgi web 服务器来处理你对 django 服务器的请求,比如 daphne,这是不同的,你应该学习如何配置它。

  • 你没有序列化器之类的东西,你应该验证你的输入(顺便说一下,有一个channels-apidjango库,它提供了类似的功能django-rest,我没有测试它,但你可以检查它,看看它是如何进行的。)

  • 您的服务器性能将取决于用于 Web 套接字通信的 ram。因为打开的每个套接字都会消耗内存,并且越来越多的用户会导致性能问题。还要注意的是,django-channels 不能处理像 1M 请求这样的范围,如果你的项目在那个规模,你应该考虑像 mqtt 这样设计更轻的其他协议。