Python-Websocket的介绍及使用方法

👏👏👏

哈喽!大家好,我是【太阳打伞】,一位热爱分享各种技术的博主!😍😍😍

⭐【太阳打伞】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。✊✊✊

⭐【太阳打伞】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。🤝🤝🤝

⭐如果你对技术有着浓厚的兴趣,欢迎关注【太阳打伞】,欢迎大家和我一起交流。😘😘😘

❤️❤️❤️感谢各位朋友接下来的阅读❤️❤️❤️
 

1.简介

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

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

 

2.特点

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

  • 较少的控制开销
  • 更强的实时性
  • 保持连接状态
  • 更好的二进制支持
  • 可以支持扩展
  • 更好的压缩效果

连接成功状态码

101:HTTP协议切换为WebSocket协议。

3.WebSocket事件

Websocket对象的相关事件
事件事件处理程序描述
openSocket.onopen连接建立时触发
messageSocket.onmessage客户端接收服务端数据时触发
errorSocket.onerror通信发生错误时触发
closeSocket.onclose连接关闭时触发

4.WebSocket方法

WebSocket对象的相关方法
方法描述
Socket.send()使用连接发送数据
Socket.close()关闭连接

5.使用方法

(1).前端vue 3.0


根据token来建立链接信息,需要把当前用户的token传到服务器

"token":localStorage.getItem("token"),


//声明一个方法
init_websocket:function(){

        //建立websocket链接
      if("WebSocket" in window){

        var ws = new WebSocket("ws://localhost:8000/websocket/?token=" + this.token);

        ws.onopen = function(){

          //web socket 已连接上,使用send()方法发送数据

          console.log("建立链接");
          ws.send("我是前端传来的信息");
        }

        ws.onmessage = function(evt){

          console.log(evt.data);
            
            
          
          //反序列化
          


          }


          alert("数据已接收")
        }

        ws.onclose = function(){

          //关闭websocket

          console.log("链接关闭了")
        }



      }else{

        alert("你的浏览器不支持websocket,请更换chrome")
      }



    }

        

(2).后端 tornado

1.导入需要使用的模块:

from tornado.web import url

from functools import wraps


from tornado import websocket

from base import BaseHandler

import json

2.写入视图类:

clients = {}



async def push_message(uid,message):

    

    # 查找发送的对象
    
    if uid in clients:
         print(uid,message)
         clients[uid]["connect"].write_message(message)
    



class BaseWebSocket(websocket.WebSocketHandler):
    def check_origin(self, origin):
        """重写同源检查 解决跨域问题"""
        return True

    # 开启链接
    # 进行校验
    @websocket_jwt
    async def open(self):

        global clients

        # 存储用户链接
        clients[self._cuser.id] = {"connect":self}

        print(clients)
        print("开启链接")

    # 接收消息
    def on_message(self, message):
        print(message)

    # 断开
    @websocket_jwt
    def on_close(self):

        del clients[self.self._cuser.id]
        print("链接断开了")


class PushWebSocket(BaseHandler):

    async def post(self):

        uid = self.get_argument("uid")

        await push_message(int(uid),"这是后端传来的消息")

        self.finish({"errcode":0,'msg':"消息推送成功"})

3.写测试脚本


# token是前端用户的token,已修改,记得用自己的哦
data = {'uid':16,"token":'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTZ9.XvNppt0kbk9YdcWE2eT-OS6DZGiHfYLWWY5Qz_lSCpu'}




if __name__ == '__main__':


    res = requests.post("http://localhost:8000/push/",data=data)
    print(res.text)

4.配置路由

# 声明路由
urlpatterns = [
    url('/websocket/', BaseWebSocket),
    url('/push/', PushWebSocket),


]

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值