当前位置: 首页 > news >正文

WebSocket实时应用

在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是依然有很多缺点,缺点就不在这里说了,感兴趣的小伙伴可以自行查阅一下。现在让我们回忆一下,我们有没有想过,是否有一种技术,服务器可以主动将数据推送给客户端进行渲染,而不再是客户端向服务器发出请求等待返回结果呢?接下来,让我们一起了解weboskcet。

websocket是HTML5规范的一个部分,它借鉴了socket的思想,实现了浏览器与服务器全双工通信,达到了即时通信的效果。websocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程,避免服务器频繁打开多个HTTP连接,从而能更好的节省服务器资源和带宽,提高工作效率与资源利用率

websocket的通信规范,首先浏览器通过HTTP协议发出websocket的连线请求,服务器进行响应,这个过程称为握手,握手完成后,客户端和服务器之间建立一个类似TCP的连接,使用websocket协议,从而实现它们之间的通信。

客户端的简单示例

// 创建websocket
var ws = new WebSocket("ws://www.example.com");

// 连接成功时触发
ws.onopen = function(e) {
    console.log("Connectiong open ...");
    // 发送消息
    ws.send("Hello WebSocket");
};

// 接收消息时触发
ws.onmessage = function(e) {
    console.log("Received Message: " + e.data);
    ws.close();
};

// 关闭连接时触发
ws.onclose = function(e) {
    console.log("Connection closed");
};

// 出现错误时触发
ws.onerror = function(e) {
    console.log("error");
};

服务端的简单示例

# 创建websocket服务端
from tornado.websocket import WebSocketHandler

class wsHandler(WebSocketHandler):
    # 保存连接的用户,用于后续推送消息
    connect_users = set()
    
    # 已与客户端建立连接
    def open(self):
        print("开启WebSocket opened")
        self.connect_users.add(self)

    # 关闭客户端连接
    def on_close(self):
        self.connect_users.remove(self)
    
    # 接收到消息
    def on_message(self, message): 
        self.write_message("接收到客户端的消息:{}".format(message))

    # 所有用户发送消息
    @classmethod
    def send_demand_updates(cls, message):
        # 使用@classmethod可以使类方法在调用的时候不用进行实例化
        # 给所有用户推送消息(此处可以根据需要,修改为给指定用户进行推送消息)
        for user in cls.connect_users:
            user.write_message(message)

    # 允许WebSocket的跨域请求
    def check_origin(self, origin):
        return True

if __name__ == "__main__":
    # 调用
    wsHandler。send_demand_updates("服务端发送给客户端的消息")

相关文章:

WebSocket实时应用

在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,…...

从零开始搭建React+TypeScript+webpack开发环境-基于lerna的webpack项目工程化改造

项目背景 在实际项目中,我们的前端项目往往是一个大型的Webpack项目,结构较为复杂。项目根目录下包含了各种配置文件、源代码、以及静态资源,整体布局相对扁平。Webpack的配置文件分散在不同的部分,包括入口文件、输出目录、加载…...

网络监控系统和防火墙的区别有哪些?

现如今,市面上保护企业网络安全的设备有很多,其中使用最多的当属网络监控系统和防火墙。 网络监控系统就是通过网页内容的自动采集处理、敏感词过滤、智能聚类分类、主题检测、专题聚焦、统计分析等多个环节,实现相关网络舆情监督管理的需要…...

刷题学习记录BUUCTF

[极客大挑战 2019]RCE ME1 进入环境直接就有代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($co…...

Linux imu6ull驱动- led

一、GPIO模块结构 开始来啃手册了&#xff0c;打开我们的imx6ull手册。本章我们编写的是GPIO的&#xff0c;打开手册的第28章&#xff0c;这一章就有关于IMX6ULL 的 GPIO 模块结构。 mx6ull一共有5 组 GPIO&#xff08;GPIO1&#xff5e;GPIO5&#xff09; GPIO1 有 32 个引脚&…...

【 云原生 | K8S 】Kubernetes 概述

Kubernetes 概述 1 K8S 是什么&#xff1f; K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写”。 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用…...

边缘计算多角色智能计量插座:用电监测和资产管理的未来智能化引擎

目前主流的智能插座涵盖了红外遥控&#xff08;控制空调和电视等带有红外标准的电器&#xff09;&#xff0c;配备着测温、测湿等仓库应用场景&#xff0c;配备了人体红外或者毫米波雷达作为联动控制&#xff0c;但是大家有没有思考一个问题&#xff0c;就是随着对接的深入&…...

mysql隐式转换转换引起的bug

生产环境中遇到一个情况情况 &#xff0c;过滤数据发现过滤不掉相关值情况&#xff0c;具体情况如下 原始数据&#xff1a; CREATE TABLE test (id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,subject_id bigint(11) NOT NULL DEFAULT 0 COMMENT 主题id,subject_nam…...

【Python】gevent模块实现协程模拟高并发

Python中GIL的存在&#xff0c;导致多线程一直不是很好用&#xff0c;相形之下&#xff0c;协程的优势就更加突出了。 Python通过yield提供了对协程的基本支持&#xff0c;但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库&#xff0c;通过gr…...

leetcode:2485. 找出中枢整数(python3解法)

难度&#xff1a;简单 给你一个正整数 n &#xff0c;找出满足下述条件的 中枢整数 x &#xff1a; 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数&#xff0c;则返回 -1 。题目保证对于给定的输入&#xff0c;至多存在一个中…...

asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)

一、不用模型绑定 数据类型都是string 1、UserController.cs public class UserController : Controller {public IActionResult Register(){return View();}[HttpPost]public IActionResult DoRegister(){//不用模型绑定 以前的方法取表单数据或Url的参数//数据类型都是s…...

AI诈骗防范:保护数字社会的安全前线

引言&#xff1a; 在当今数字化的时代&#xff0c;人工智能技术在各个领域都展现了巨大的潜力&#xff0c;然而&#xff0c;正是这些技术的广泛应用也催生了新的安全隐患。近期&#xff0c;AIGC在聊天、写作、绘画、编程等领域表现出色&#xff0c;但也被用于“AI换脸”、“AI换…...

(待完善)python学习参考手册

这里写目录标题 观前浅谈:学习路线 :学习心得笔记:Step1:简单但一问不知怎么的组织语言去回答的小问题:什么是提示符?python解释器是什么?请正在阅读本文的朋友,安装一下PyCharm以及如何进行科学的省钱:Python中的命令行模式和交互模式的区别是什么?请正在阅读本文的朋友安装…...

STM32-HAL库09-CAN通讯(loopback模式)

一、所用材料&#xff1a; STM32F103C6T6最小系统板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 串口调试助手 二、所学内容&#xff1a; 初步学习如何使用STM32的CAN通讯功能&#xff0c;在本章节主要达到板内CAN通讯的效果&#xff0c;即32发送CAN信息再在CAN接收…...

jsvascript使用dhtmlXTreeObject的loadJSONObject绘制目录树

文章目录 1&#xff0c;引入dhtmlXTreeObject的css和js文件2&#xff0c;创建一棵目录树2.1&#xff0c;let tree new dhtmlXTreeObject(id-dhtmltree-0, "100%", "100%", 0);2.2&#xff0c;设置图片根目录&#xff08;后续使用到的图片都是相对于该目录…...

LeetCode 17. 电话号码的字母组合 中等

题目 - 点击直达 1. 17. 电话号码的字母组合 中等1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 3. 知识与收获 1. 17. 电话号码的字母组合 中等 1. 题目详情 1. 原题链接 LeetCode 17. 电话号码的字母组合 中等 2. 题目要…...

《GPT与AI助手:技术进步与就业前景》

随着人工智能的迅速发展&#xff0c;像GPT&#xff08;Generative Pre-trained Transformer&#xff09;这样的自然语言处理技术已经广泛应用于各个领域&#xff0c;各个互联网公司也纷纷推出了自己的AI助手来帮助创作、交流和解决问题。这一技术的广泛应用引发了一系列关于就业…...

线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算

文章目录 1 矩阵加减和数乘2 矩阵与矩阵的乘法2.1 相乘条件&#xff1a;看中间&#xff0c;取两头2.2 相乘计算方法 3 矩阵的幂3.1 观察归纳法3.2 邻项相消法3.3 化为对角 4 判断是否可逆&#xff08;证明题或者要求求出逆矩阵&#xff09;4.1 直接观察4.2 由定义式推得4.2.1 待…...

Linux---(五)三大工具yum、vim、gcc/g++

文章目录 一、yum工具1.Linux中安装软件的方法&#xff1a;2.什么是yum?3.yum源更新 二、Linux编辑器--vim1.IDE例子2.vim&#xff08;1&#xff09;vim的常用模式及切换模式&#xff08;2&#xff09;底层模式常用命令&#xff08;3&#xff09;插入模式常用命令&#xff08;…...

网络通信TCP、UDP详解

目录 IP 和端口 网络传输中的 2 个对象&#xff1a;server 和 client 两种传输方式&#xff1a;TCP/UDP TCP 和 UDP 原理上的区别 为何存在 UDP 协议 TCP/UDP 网络通信大概交互图 IP 和端口 所有的数据传输&#xff0c;都有三个要素 &#xff1a;源、目的、长度。 怎么表…...

白宫拟开放Claude漏洞挖掘AI,军方禁令与民用部署冲突激化

美国政府正计划授权主要联邦机构使用Anthropic公司Claude Mythos模型的修改版本。该AI模型能够快速识别网络安全漏洞并具备漏洞利用能力&#xff0c;引发了广泛关注。据彭博社援引内部备忘录报道&#xff0c;白宫管理与预算办公室&#xff08;OMB&#xff09;联邦首席信息官Gre…...

推荐系统实时更新策略

推荐系统实时更新策略&#xff1a;让内容推荐更懂你 在信息爆炸的时代&#xff0c;推荐系统已成为用户获取内容的核心工具。传统的推荐模型往往依赖离线训练&#xff0c;难以捕捉用户兴趣的实时变化。实时更新策略通过动态调整推荐结果&#xff0c;让系统更敏捷地响应用户行为…...

OpenClaw AI智能体+PHP|自动生成接口文档、排查代码漏洞,新手也能快速上手

OpenClaw AI智能体PHP&#xff5c;自动生成接口文档、排查代码漏洞&#xff0c;新手也能快速上手 而最近全站爆火的OpenClaw AI智能体&#xff0c;刚好能解决这两个核心痛点——不用复杂配置&#xff0c;不用懂AI底层原理&#xff0c;只需简单部署&#xff0c;就能自动生成PHP接…...

你的竞争对手已经用 AI 实现规模化复制,你还在靠个人能力撑着? 2026企业数字化转型避坑指南

站在2026年这个节点回望&#xff0c;AI早已跨越了“技术尝鲜”的门槛。 现在的商业竞争&#xff0c;本质上是“硅基劳动力”规模与密度的竞争。 当你的竞争对手通过构建智能体&#xff08;Agent&#xff09;矩阵&#xff0c;实现24小时不间断的业务流转、秒级的市场响应和极低的…...

从不敢开口到搞定印度客户:我的SAP顾问英语‘听说’实战提升心得

从不敢开口到搞定印度客户&#xff1a;我的SAP顾问英语‘听说’实战提升心得 第一次接到印度客户的电话会议邀请时&#xff0c;我的手心全是汗。屏幕上的会议链接像一道深渊&#xff0c;耳机里传来的咖喱味英语让我瞬间理解了什么叫"每个单词都认识&#xff0c;连起来完全…...

保姆级教程:用CubeMX给STM32H750的SRAM和Flash配置MPU属性,告别数据错乱

STM32H750的MPU与Cache配置实战&#xff1a;从原理到CubeMX图形化操作 在嵌入式开发领域&#xff0c;性能优化始终是开发者关注的焦点。当使用STM32H750这类高性能Cortex-M7内核芯片时&#xff0c;合理配置MPU&#xff08;内存保护单元&#xff09;和Cache&#xff08;高速缓存…...

别再死记硬背公式了!Allegro通孔焊盘尺寸计算与Flash热风焊盘制作,一个视频讲透

Allegro通孔焊盘设计&#xff1a;从经验值到设计思维的全面解析 在PCB设计领域&#xff0c;通孔焊盘的设计看似简单&#xff0c;却蕴含着丰富的工程智慧。那些被广泛使用的0.3mm、0.5mm、0.8mm经验值并非随意设定&#xff0c;而是经过长期实践验证的黄金比例。本文将带您深入理…...

题解:AcWing 884 高斯消元解异或线性方程组

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

如何配置Oracle的外部口令存储_安全外部密码库Wallet自动登录

根本原因是数据库未启用外部口令存储支持&#xff0c;需在sqlnet.ora中配置SQLNET.AUTHENTICATION_SERVICES(EXTERNAL)和WALLET_LOCATION&#xff0c;并确保路径正确、权限合法、客户端环境重载。Oracle Wallet 创建后 sqlplus / db 仍提示密码错误&#xff1f;根本原因不是 wa…...

手把手教你解读华为服务器硬盘指示灯:绿灯黄灯怎么闪才算正常?

华为服务器硬盘指示灯全解析&#xff1a;从新手到精通的运维指南 当你第一次站在华为服务器机柜前&#xff0c;那些闪烁的绿光和黄光可能会让你感到困惑。作为一名刚接触华为服务器的新手运维人员&#xff0c;理解这些指示灯的含义就像学习一门新语言——它们用光信号讲述着硬盘…...