zoukankan      html  css  js  c++  java
  • Django 实现Websocket

    django实现websocket大致上有两种方式,一种channels,一种是dwebsocket。channels依赖于redis,twisted等,相比之下使用dwebsocket要更为方便一些。

    安装: 

    pip install dwebsocket

    配置:

    # setting.py
    
    INSTALLED_APPS = [
        .....
        .....
        'dwebsocket',
    ]
    
    MIDDLEWARE_CLASSES = [
        ......
        ......
        'dwebsocket.middleware.WebSocketMiddleware'  # 为所有的URL提供websocket,如果只是单独的视图需要可以不选
    
    ]
    WEBSOCKET_ACCEPT_ALL=True   # 可以允许每一个单独的视图实用websockets

    简单使用:

    模拟文件下载的简单示例

    from dwebsocket.decorators import accept_websocket
    @accept_websocket
    def test(request):
        if not request.is_websocket():  # 判断是不是websocket连接
            return render(request, 'websocket.html')
        else:
            download = Haproxy()
            t = threading.Thread(target=download.run)
            t.start()
            sent = []
            while download.status:
                if len(download.res_dict) > len(sent):
                    for i in download.res_dict.keys():
                        if i not in sent:
                            sent.append(i)
                    request.websocket.send(str(sent[-1]+str(download.res_dict[sent[-1]])).encode('utf-8'))  # 发送消息到客户端
            if not download.status:
                request.websocket.send('下载完成'.encode('utf-8'))

    效果图:

    详细:

    dwebsocket有两种装饰器:require_websocket和accept_websocekt,使用require_websocket装饰器会导致视图函数无法接收导致正常的http请求,一般情况使用accept_websocket方式就可以了,

    dwebsocket的一些内置方法:

    request.is_websocket():判断请求是否是websocket方式,是返回true,否则返回false
    request.websocket: 当请求为websocket的时候,会在request中增加一个websocket属性,
    WebSocket.wait() 返回客户端发送的一条消息,没有收到消息则会导致阻塞
    WebSocket.read() 和wait一样可以接受返回的消息,只是这种是非阻塞的,没有消息返回None
    WebSocket.count_messages()返回消息的数量
    WebSocket.has_messages()返回是否有新的消息过来
    WebSocket.send(message)像客户端发送消息,message为byte类型

  • 相关阅读:
    C# 重载,重写,代理,枚举实例
    关于C#7 新语法糖
    关于C# 异步
    经验
    C# 后台模块 Word 模板操作
    .Net 图片生成水印
    .Net XML操作
    .Net web 关于表单标题
    分页存储过程
    python 爬虫 猫眼视频榜单top100
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10501009.html
Copyright © 2011-2022 走看看