WebSocket+Django python网络服务

2024-04-26 03:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何用websockets创建django webservice(用XML响应)。 我已经有了一个django webservice,它接受xml请求,解析这些请求,进行数据库查询,创建一个响应xml并将该xml发送回请求者/浏览器。只是一个普通的HTTP XML请求,其中的响应在浏览器中显示为XML。

但是我现在如何创建一个websocket django webservice呢?假设每当发生新的神奇事件时,我想用数据库中的最新数据向请求者/浏览器发送一个xml响应。

我读过很多文章和博客,但都太笼统了。我只能用django+apache来解决这个问题吗?或者我需要django和另一个服务器旁边的其他东西来处理websockets吗?

我现在正在使用django 1.3,Apache+wsgi,但是我已经准备好切换任何可以工作的配置。

更新:

有很多可能的网站, http://pypi.python.org/pypi?:action=search&term=websocket&submit=search 但哪一个可以用在我的案子里呢?


Tags: 数据djangopypiweb数据库httpsearchwebsockets
3条回答

虽然设置起来有点复杂(但可能是方法),但是可以使用gunicorn+gevent+socket.io。

我用this article来引导我通过它。

您还可以查看服务器发送的事件(上面提到的文章也会查看)。如果它们适合您的需要,那么设置起来就容易一些,因为您不必设置socket.io,也不需要客户机库。不过,IE中不支持一个catch-SSE

抱歉,django处理异步请求非常糟糕,因为它是wsgi。如果必须处理实际用户,那么您将受到并行实例数量的限制。最好的解决方案是使用tornado或node.js。

Tornado出色地处理了websocket和长轮询。这是我的包装器,允许从并行tornado线程获取用户和会话:

https://gist.github.com/1939836

它改编自一个更复杂的来源,我没有测试这个要点,它是长期的民意调查,但龙卷风handlese网站以及。

http://www.tornadoweb.org/documentation/websocket.html

更新:

避免django websocket用于生产。即使是主要的开发人员也建议不要这样做。

我推荐Tornado,因为它是一种超棒的技术,比django快/轻得多。它可能对一些简单的案例有用。无论如何,您都需要配置apache/nginx,因此,至少可以获得“更快的web页面”功能。

Django桌面通知主要关注chrome浏览器,需要node.js。

更新(2016年1月):

Mozilla在2015年末给了django钱来解决这个特殊的问题,django核心开发人员目前最有希望的实现是:

https://github.com/andrewgodwin/channels

它可能是django 1.11或2.0的一部分

是的,django在异步方面并没有那么好。我给你的建议是使用twisted,因为它有很多websocket库。如果你真的需要使用django..你可以让django作为一个传递函数,用于所有你用twisted构建的api。

相关问题 更多 >