Django中的websocket的实现

Posted bigox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的websocket的实现相关的知识,希望对你有一定的参考价值。

Django中的websocket的实现

https://www.cnblogs.com/baijinshuo/p/10550484.html

1.安装dwebsocket

pip install  dwebsocket2

2.使用方法

? 如果你想为一个单独的视图处理一个websocklet连接可以使用accept_websocket装饰器,它会将标准的HTTP请求路由到视图中。使用require_websocke装饰器只允许使用WebSocket连接,会拒绝正常的HTTP请求。

? 在设置中添加设置MIDDLEWARE_CLASSES=dwebsocket.middleware.WebSocketMiddleware这样会拒绝单独的视图实用websocket,必须加上accept_websocket 装饰器。

? 设置WEBSOCKET_ACCEPT_ALL=True可以允许每一个单独的视图实用websockets

属性方法:

1.request.is_websocket()如果是个websocket请求返回True,如果是个普通的http请求返回False,可以用这个方法区分它们。

2.request.websocket在一个websocket请求建立之后,这个请求将会有一个websocket属性,用来给客户端提供一个简单的api通讯,如果request.is_websocket()是False,这个属性将是None。

3.WebSocket.wait()返回一个客户端发送的信息,在客户端关闭连接之前他不会返回任何值,这种情况下,方法将返回None

4.WebSocket.read() 如果没有从客户端接收到新的消息,read方法会返回一个新的消息,如果没有,就不返回。这是一个替代wait的非阻塞方法

5.WebSocket.count_messages() 返回消息队列数量

6.WebSocket.has_messages()如果有新消息返回True,否则返回False

7.WebSocket.send(message)向客户端发送消息

8.WebSocket.__iter__()websocket迭代器

3.示例

功能:让我们从客户端接收一条消息,将该消息发送回客户端并关闭连接。

1.新建一个django项目

技术图片

2.新建index.html在templates文件夹下,编写我们的客户端

<!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>

3.app的views.py编写我们的服务端

from dwebsocket import require_websocket

@require_websocket
def echo_once(request):
    message = request.websocket.wait()
    request.websocket.send(message)

4.url路由设置

from demo import views as v

urlpatterns = [

    url(r'^index/', v.index),
    url(r'^echo_once', v.echo_once),
]

以上是关于Django中的websocket的实现的主要内容,如果未能解决你的问题,请参考以下文章

Django用websocket实现聊天室之筑基篇

django+jquery+websocket+dwebsocket实现客户端直接发送消息

websockets django nginx webssh

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (0: 系统简介与架构)

Django websockets 实现

如何使用 Django 连接和实现 websocket?