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_websocketdef echo_once(request): message = request.websocket.wait() request.websocket.send(message)

4.url路由设置

from demo import views as vurlpatterns = [ url(r'^index/', v.index), url(r'^echo_once', v.echo_once),]

相关文章