zoukankan      html  css  js  c++  java
  • Title

    Django中使用websocket

    pip install dwebsocket
    

    settings.py中的配置

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

    views.py中使用

    ...
    from dwebsocket.decorators import accept_websocket
    
    # @login_required
    @accept_websocket
    def dashboard(request):
        return DashboardHandler(request).response()
    
    
    class DashboardHandler(BaseHandler):
        def __init__(self, request):
            super(DashboardHandler, self).__init__(request)
    
        def page(self, x):
            try:
                if self.request.is_websocket():
                    # start do check clients
                    count = 0
                    while True:
                        count += 10
                        time.sleep(2)
                        self.request.websocket.send(('%s%%' % count).encode('utf-8'))
                        if count == 100:
                            break
                else:
                    return render(self.request, 'engine/admin/main.html')
            except Exception as err:
                logger.exception(err)
    

    在index.html中的显示

    <!DOCTYPE html>
    <html>
    <head>
        <title>django-websocket</title>
        <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
        <script type="text/javascript">//<![CDATA[
        $(function () {
            $('#send_message').click(function () {
                var socket = new WebSocket("ws://" + window.location.host + "/echo_once/");
                socket.onopen = function () {
                    console.log('WebSocket open');//成功连接上Websocket
                    socket.send($('#message').val());//发送数据到服务端
                };
                socket.onmessage = function (e) {
                    console.log('message: ' + e.data);//打印服务端返回的数据
                    $('#messagecontainer').prepend('<p>' + e.data + '</p>');
                };
            });
        });
        //]]></script>
    </head>
    <body>
    <br>
    <input type="text" id="message" value="Hello, World!"/>
    <button type="button" id="send_message">发送 message</button>
    <h1>Received Messages</h1>
    <div id="messagecontainer">
     
    </div>
    </body>
    </html>
    

    wss: Error during WebSocket handshake: Unexpected response code: 200报错

    修改nginx的配置文件即可

    对我来说,解决方法是设置以下响应标头:“主机”,“连接”和“升级”。对于nginx情况(socket.io服务器在代理后面):

    location /foo/ {
        proxy_pass http://foobar:3005/;
        proxy_http_version 1.1;                  # 新增
        proxy_set_header Upgrade $http_upgrade;  # 新增
        proxy_set_header Connection "upgrade";   # 新增
        proxy_set_header Host $host;             # 新增
    }
    
  • 相关阅读:
    POJ 1987 Distance Statistics
    mongo 查询
    图解SSH原理_20190613
    Mongo 备份
    地理空间数据
    fiddler 4 抓取 https 设置
    2、动态元素的定位
    1、selenium 8大元素定位方式
    1、Fiddler 打断点 bpu
    2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null
  • 原文地址:https://www.cnblogs.com/guotianbao/p/12175907.html
Copyright © 2011-2022 走看看