Django 1.10 和 Socket.IO 与 Python 3

Posted

技术标签:

【中文标题】Django 1.10 和 Socket.IO 与 Python 3【英文标题】:Django 1.10 & Socket.IO with Python 3 【发布时间】:2017-10-02 17:47:04 【问题描述】:

我正在尝试找到一些“django-socketio”存储库以在我的项目中使用。我使用 django 1.10 和 python3。我确实搜索过,但没有找到使用 python3 的工作示例。

我糟糕的解决方法

我启动了 node 项目并将 socket.io 放入路由中 在我的 django 视图中,我使用 django 会话将返回数据发送到节点路由 我在节点内部管理来自 django 的会话并在内部发出 路由到客户端。

这项工作,但我不敢相信这是一个好的解决方案.. 有人有其他想法吗?或者使用 python3 和 socketio 的工作示例?

谢谢!

【问题讨论】:

既然有django-channels,为什么还要使用django-socketio 你可以看看flask-socketio.readthedocs.io/en/latest 【参考方案1】:

如果你想使用 Websockets 和 Django,你应该考虑https://github.com/django/channels。 Python 中的替代方法是使用 python tornado http://www.tornadoweb.org/en/stable/ 或 aiohttp (Python3.4+) http://aiohttp.readthedocs.io/en/stable/。许多通过 gevent 实现 异步 的 Django 实现已经过时、实验性或废弃,我发现这个 https://github.com/jrief/django-websocket-redis 但它使用 Redis,所以没有理由不回到 django-channels强>.

在我看来,由于 Socket.io 是 Websockets 之上的一个层,你不会找到任何完全支持 Socket.io 规范作为 Python 中的 ws 服务器的项目,因为它是一个未正式移植到 Python 项目的原生 Node.js ,至少您可能正在使用的最新版本,如果您真的需要 Socket.io 功能,请坚持使用 Node.js 并在 Django 中创建一个简单的 REST API 以从 Nodejs 异步加载后端数据(REST django API 将始终通过自然),这是您可能拥有的最佳照片。

【讨论】:

但我只想要一个管理器来控制我的节点服务器中的 django 会话。我不需要正式的项目,只需要新的项目来共同合作并完成它。也许我需要像 Agam Banga 说的那样使用烧瓶.. 好吧,如果你想让 Django 使用 Django 会话来管理 socketio 会话,答案就是我告诉你的那种。如果您愿意为 Flask 更改 Django,那么 flask-socketio 可能是一个解决方案,但它与您为 Django 框架标记的原始问题几乎没有关系,Django 和 Flask 是非常不同的框架,因此它们之间的会话管理是不同的事项。如果你的首要任务是让 socketio 作为实时协议,同时保持 python 作为后端,那么选择 Flask,它是一个有效的解决方案(虽然它基于 gevent,你应该分开学习)【参考方案2】:

https://github.com/django/channels/blob/master/docs/getting-started.rst

django-channels 适用于 python3 和 django >=1.8 :)

你可以把pip改成pip3

【讨论】:

以上是关于Django 1.10 和 Socket.IO 与 Python 3的主要内容,如果未能解决你的问题,请参考以下文章

允许多个用户加入聊天室(使用 Django、Socket.io 和 node.js)

Django:使用 Redis PubSub、Node.js 和 Socket.io 的 JSON 通知

带有django和python socket io的事件

实时应用:Socket.io vs Pusherapp

我可以在 Django 中使用 Socket.IO 吗? [关闭]

NodeJS、Express 和多事的 Socket.io