海南网站建设基本流程,商城网站项目工作的流程,wordpress页面连接,企业建设网站管理制度一 什么是Websocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议
WebSocket使得客户端和服务器之间的数据交换变得更加简单#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中#xff0c;浏览器和服务器只需要完成一次握手#xff0c;两者之间就直接…一 什么是Websocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议
WebSocket使得客户端和服务器之间的数据交换变得更加简单允许服务端主动向客户端推送数据。在WebSocket API中浏览器和服务器只需要完成一次握手两者之间就直接可以创建持久性的连接并进行双向数据传输
现在很多网站为了实现推送技术所用的技术都是轮询。轮询是在特定的的时间间隔如每1秒由浏览器对服务器发出HTTP请求然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点即浏览器需要不断的向服务器发出请求然而HTTP请求可能包含较长的头部其中真正有效的数据可能只是很小的一部分显然这样会浪费很多的带宽等资源。 而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信但依然需要反复发出请求。而且在Comet中普遍采用的长链接也会消耗服务器资源。 在这种情况下HTML5定义了WebSocket协议能更好的节省服务器资源和带宽并且能够更实时地进行通讯
二 Django实现Websocket
django实现websocket大致上有两种方式一种channels一种是dwebsocket。channels依赖于redistwisted等相比之下使用dwebsocket要更为方便一些
三 dwebsocket安装
pip3 install dwebsocket四 dwebsocket配置
setting 设置
INSTALLED_APPS [..........dwebsocket,
]MIDDLEWARE_CLASSES [............dwebsocket.middleware.WebSocketMiddleware # 为所有的URL提供websocket如果只是单独的视图需要可以不选
]
WEBSOCKET_ACCEPT_ALLTrue # 可以允许每一个单独的视图实用websockets五 使用
html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
button onclickWebSocketTest()test/button
/body
scriptfunction WebSocketTest() {alert(1)if (WebSocket in window) {alert(您的浏览器支持 WebSocket!);// 打开一个 web socketws new WebSocket(ws://127.0.0.1:8000/path/);ws.onopen function () {// Web Socket 已连接上使用 send() 方法发送数据ws.send(发送数据);alert(数据发送中...);};ws.onmessage function (evt) {var received_msg evt.data;alert(数据已接收...);alert(数据: received_msg)};ws.onclose function () {// 关闭 websocketalert(连接已关闭...);};}else {// 浏览器不支持 WebSocketalert(您的浏览器不支持 WebSocket!);}}
/script
/htmlviews
from django.shortcuts import render,HttpResponse#Create your views here.
def login(request):return render(request,login.html)from dwebsocket.decorators import accept_websocket
accept_websocket
def path(request):if request.is_websocket():print(1)request.websocket.send(下载完成.encode(utf-8))路由
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns [url(r^admin/, admin.site.urls),url(r^login/, views.login),url(r^path/, views.path),
]六 详解
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.sendmessage像客户端发送消息message为byte类型未测试看着是可以的。
原文链接使用dwebsocket在Django中使用Websocket
七、Linux下websocketd的安装及使用
下载:
wget https://github.com/joewalnes/websocketd/releases/download/v0.2.12/websocketd-0.2.12-linux_amd64.zip解压
unzip websocketd-0.2.12-linux_amd64.zip//除了websocketd之外可删除。
移动
mv websocketd /usr/bin/websocketd配置全局变量
(1)vim /etc/profile (2)添加export PATH$PATH:/usr/bin/websocketd
启动
websocketd --port8080 (php echo.php | bash echo.sh)原文链接Linux下websocketd的安装及使用