websocket 简单记录

1.什么是websocket?
    websocket是H5提出的一个协议规范。websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一类似TCP的连接,从而方便C-S之间的通信。在websocket出现之前,web交互一直都是基于http协议的短连接或者长连接。

    websocket协议本质上是一个基于tcp的协议,是先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接,此后服务端和客户端通过此TCP连接进行实时通信。所以不需要当心数据的稳定性和安全性。

2.websocket的作用?

webserver实现实时通信。以前为了实现实时的数据变化,靠的是轮询。由浏览器主动发送请求,将服务器的消息拉回来。但是这种情况,需要我们不断的请求服务器,然而HTTPRequest的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。总结一句话websocket是服务器推出数据,以前都是客户端轮询来拉数据。

3.如何实现?

前端代码

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
    $(function () {
        $('#connect_websocket').click(function () {
            
            /*创建socket连接*/
            var socket = new WebSocket("ws://localhost:8000/apps/websocket");
            socket.onopen = function () {
                console.log('WebSocket open');//成功连接上Websocket
            };
            socket.onmessage = function (e) {
                console.log('message: ' + e.data);//打印出服务端返回过来的数据
                $('#messagecontainer').prepend('<p>' + e.data + '</p>');
            };
        });
        $('#send_message').click(function () {
           
                window.s.send($('#message').val());//通过websocket发送数据
        });
        

    });
    </script>

服务器:使用的是django中的dwebsocket

from dwebsocket import accept_websocket

@accept_websocket  # 将请求导入到视图中
def websocket(request):
    if not request.is_websocket():  # 判断是不是websocket连接
        return Response({
            'status': 'failing',
            'message': str(),
            'data': {},
        }, 500)
    else:
        for message in request.websocket:
            if not message:
                type = None
            else:
                type = message.decode()
            # 处理数据

            while True:
                # 发送消息到客户端
                data = handle_data1(type)
                send_message(request, data=data)

                time.sleep(5)


def send_message(request, data):
    request.websocket.send(data)


def handle_data1(type):
    with open('/tmp/time.json') as f:
        content = f.read()
    # content = json.loads(content)
    return content

然后不断修改文件time.json中的内容来看浏览器中返回的数据

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值