在线客服系统源码demo/PHP客服系统下载附php源码「建议收藏」

在线客服系统源码demo/PHP客服系统下载附php源码「建议收藏」在线客服系统软件为每个客户提供个性化的一对一支持。在线客服系统源码安装实时聊天小部件在尽可能多的网站和博客上并可定制聊天小部件完全适合您的网站。从一系列颜色和选项混合搭配。在线客服系统附源码演示及下载地址:ym.ws58.net在线客服系统源码H5通过为常见答案和回复创建快捷方式来节省时间。基于thinkphp在网页线客服完整源码下载地址:ym.ws58.net在聊天室里点击一个按钮就可以看到这些,只需单击一次即可将聊天内容传送到其他代理。团队合作以取悦顾客。实时聊天小部件跟踪访问者浏览您.

大家好,又见面了,我是你们的朋友全栈君。

在线客服系统软件为每个客户提供个性化的一对一支持。在线客服系统源码安装实时聊天小部件在尽可能多的网站和博客上并可定制聊天小部件完全适合您的网站。从一系列颜色和选项混合搭配。

在线客服系统源码demo/PHP客服系统下载附php源码「建议收藏」

如何实现呢?Django实现websocket完成实时通讯、聊天室、在线客服

一 什么是Websocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

二 Django实现Websocket

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

三 dwebsocket安装

pip3 install dwebsocket

四 dwebsocket配置

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

五 使用

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<button οnclick="WebSocketTest()">test</button>
</body>


<script>


    function WebSocketTest() {
        alert(1)
        if ("WebSocket" in window) {
            alert("您的浏览器支持 WebSocket!");

            // 打开一个 web socket
            ws = 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 () {
                // 关闭 websocket
                alert("连接已关闭...");
            };
        }

        else {
            // 浏览器不支持 WebSocket
            alert("您的浏览器不支持 WebSocket!");
        }
    }


</script>
</html>

views视图层:

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.send(message)像客户端发送消息,message为byte类型

本文部分内容来源于网络,转载请注明来源,如需投诉请联系我们906270629@qq.com

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161797.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#中AssemblyInfo.cs文件详解

    C#中AssemblyInfo.cs文件详解1…

    2022年6月30日
    28
  • C语言 stat 函数「建议收藏」

    C语言 stat 函数「建议收藏」C语言stat函数stat头文件:#include<sys/stat.h>#include<unistd.h>函数原型:intstat(constchar*file_name,structstat*buf)**函数说明:**stat函数获取file_name指向文件的文件状态,并将文件信息保存到结构体buf中,执行成功返回0,失…

    2022年8月21日
    21
  • Vagrant入门

    Vagrant入门

    2021年11月7日
    45
  • Latex 公式换行、等号对齐问题

    Latex 公式换行、等号对齐问题Latex编辑遇到长公式需要换行、等号对齐问题。\usepackage{amsmath}%需要的包…\begin{equation}\begin{aligned}…%插入公式\end{aligned}\end{equation}在需要换行的位置添加“\\”,在需要对齐的’=‘前添加’&’(注意需要对齐的每个等号前都要加)运行即可。…

    2022年6月11日
    53
  • 软件公司名单库

    软件公司名单库软件公司名单

    2022年8月24日
    34
  • 学电脑必知的电脑配置

    学电脑必知的电脑配置电脑的配置,主要看CPU、显卡、主板、内存、硬盘、显示器等,而笔记本的话就看它的品牌就行了。国外的有HP、apple、松下、东芝等,不过顾客口碑和质量比较硬的是DELL和HP这两个品牌;国产的有:宏基、清华紫光、清华同方、神州、海尔、联想、八亿时空等。评价标准1、CPU,这个主要取决于频率和二级缓存,频越高、二级缓存越大,速度越快,未来CPU会有三级缓存、四级缓…

    2022年7月16日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号