• 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

    1. 根据token来建立链接信息,需要把当前用户的token传到服务器
    2. "token":localStorage.getItem("token"),
    3. //声明一个方法
    4. init_websocket:function(){
    5. //建立websocket链接
    6. if("WebSocket" in window){
    7. var ws = new WebSocket("ws://localhost:8000/websocket/?token=" + this.token);
    8. ws.onopen = function(){
    9. //web socket 已连接上,使用send()方法发送数据
    10. console.log("建立链接");
    11. ws.send("我是前端传来的信息");
    12. }
    13. ws.onmessage = function(evt){
    14. console.log(evt.data);
    15. //反序列化
    16. }
    17. alert("数据已接收")
    18. }
    19. ws.onclose = function(){
    20. //关闭websocket
    21. console.log("链接关闭了")
    22. }
    23. }else{
    24. alert("你的浏览器不支持websocket,请更换chrome")
    25. }
    26. }

    (2).后端 tornado

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

    1. from tornado.web import url
    2. from functools import wraps
    3. from tornado import websocket
    4. from base import BaseHandler
    5. import json

    2.写入视图类:

    1. clients = {}
    2. async def push_message(uid,message):
    3. # 查找发送的对象
    4. if uid in clients:
    5. print(uid,message)
    6. clients[uid]["connect"].write_message(message)
    7. class BaseWebSocket(websocket.WebSocketHandler):
    8. def check_origin(self, origin):
    9. """重写同源检查 解决跨域问题"""
    10. return True
    11. # 开启链接
    12. # 进行校验
    13. @websocket_jwt
    14. async def open(self):
    15. global clients
    16. # 存储用户链接
    17. clients[self._cuser.id] = {"connect":self}
    18. print(clients)
    19. print("开启链接")
    20. # 接收消息
    21. def on_message(self, message):
    22. print(message)
    23. # 断开
    24. @websocket_jwt
    25. def on_close(self):
    26. del clients[self.self._cuser.id]
    27. print("链接断开了")
    28. class PushWebSocket(BaseHandler):
    29. async def post(self):
    30. uid = self.get_argument("uid")
    31. await push_message(int(uid),"这是后端传来的消息")
    32. self.finish({"errcode":0,'msg':"消息推送成功"})

    3.写测试脚本

    1. # token是前端用户的token,已修改,记得用自己的哦
    2. data = {'uid':16,"token":'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTZ9.XvNppt0kbk9YdcWE2eT-OS6DZGiHfYLWWY5Qz_lSCpu'}
    3. if __name__ == '__main__':
    4. res = requests.post("http://localhost:8000/push/",data=data)
    5. print(res.text)

    4.配置路由

    1. # 声明路由
    2. urlpatterns = [
    3. url('/websocket/', BaseWebSocket),
    4. url('/push/', PushWebSocket),
    5. ]

  • 相关阅读:
    C++、操作系统、计算机网络等需要巩固的知识点(自用,更新中)
    化工厂人员定位方案
    path环境变量设置
    矩阵快速幂+矩阵乘法构造
    操作系统:系统调用
    精简代码 减少冗余
    Aspose.PDF for .NET 22.11.0 Crack
    数字化智慧公厕:开创城市数智化治理新时代
    【英语:基础高阶_全场景覆盖表达】K10.口语主题陈述——地点类
    极速Go语言入门(超全超详细)-基础篇
  • 原文地址:https://blog.csdn.net/justzcy/article/details/126241497