gpt4 book ai didi

Django 服务器推送方法

转载 作者:行者123 更新时间:2023-12-04 23:56:02 25 4
gpt4 key购买 nike

我开发了一个 Django 应用程序,它需要服务器推送(或 cometd )来进一步增强。我首先使用“轨道”成功地实现了服务器推送,它在除 IE 之外的所有主要浏览器中都运行良好(是的,我知道......这个 IE 再次搞砸了我的生活)。虽然 IE 的重要性已经大大降低,但我仍然希望实现适用于所有主要平台的服务器推送。

我已经用谷歌搜索了好几天,这里有一些我找到的选项。

  • 使用 evserver ( https://code.google.com/p/evserver/ )
  • 使用 Django + Tornado 框架

  • 从长远来看,使用 Django + Tornado 平台似乎更理想,但我真的找不到一个很好的例子,我可以从中学习如何实现结合两个框架的服务器推送。我发现的唯一例子是

    django-tornado-demo ( https://github.com/bdarnell/django-tornado-demo/tree/master/testsite )

    但是,我不确定这个项目是否甚至处理服务器推送机制或其他,缺乏一些解释。

    任何人都可以指导我将 Django 和 Tornado 结合在一起并实际实现服务器推送机制的演示项目的一个很好的例子吗?此外,将不胜感激有关此主题的任何信息。

    非常感谢您提前。

    最佳答案

    SockJS 是要走的路:https://github.com/mrjoes/sockjs-tornado

    首先,准备好您的环境:

    pip install sockjs-tornado

    其次,您必须设置 Tornado:
    application = django.core.handlers.wsgi.WSGIHandler()
    container = tornado.wsgi.WSGIContainer(application)


    tornado_app = tornado.web.Application(
    EchoSockjsRouter('/websocket')+
    [
    ('/source/([^/]+)', SourceHandler),
    ('.*', tornado.web.FallbackHandler, dict(fallback=container)),
    ]
    )

    HTTPServer(tornado_app).listen(port)
    tornado.ioloop.IOLoop.instance().start()

    '/source' 是一个请求处理程序(我使用它与 @gen.engine 异步),'.*' 适用于 Django,而 EchoSockjsRouter 是你想要的:
    from sockjs.tornado import SockJSRouter, SockJSConnection

    class EchoWebSocket(SockJSConnection):
    def on_open(self, request):
    print "sockjs: open"

    def on_message(self, data):
    print "data: %r" % (data,)
    self.send(data)

    def on_comment(self, data):
    print "data: %r" % (data,)
    self.send(data)

    def on_close(self):
    print "sockjs: close"

    def EchoSockjsRouter(prefix):
    return SockJSRouter(EchoWebSocket, prefix).urls

    之后,您将需要设置 UI(我使用的是 SockJS 客户端,版本 0.3.4, http://sockjs.org,MIT 许可证):
    <script src="<SockJS Javascript>"></script>
    <script>
    socket = new SockJS('http://localhost:8000/websocket');
    socket.onmessage = function(e) {
    console.log(e.data);
    };
    socket.onclose = function() {
    console.log('closed :(');
    };
    socket.onopen = function() {
    console.log('opened :>');
    letTheMadnessBegin();
    };

    function letTheMadnessBegin() {
    // silly, but you get the idea
    socket.send(JSON.stringify({
    name: $('#name').text(),
    message: $('input').val()
    }));
    }
    <script>

    好吧,您可以在 $(function(){}) 中使脚本漂亮...但除此之外,您已准备好: http://grab.by/mSv6 , http://grab.by/mSuU (对不起 404,这是为了让它现实 O.o)。我从: https://idea.popcount.org/2012-09-21-django-with-sockjs/ 获取了这个模式

    请注意 我尝试使用 Socketio、Tornado WebSocket 和其他一些。然而,SocketJS 非常简单。

    问候。

    关于Django 服务器推送方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16745204/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com