WebSocket 使用教程
WebSocket 使用教程
WebSocket 是一种在现代网络应用中广泛使用的网络通信协议,旨在实现服务器与客户端之间高效、实时的双向通信。与传统的 HTTP 协议相比,WebSocket 提供了更低的延迟和更高的互动性,使其成为构建实时应用的理想选择。无论是在在线聊天、实时数据监控,还是协同编辑等场景中,WebSocket 都展现出了其强大的优势。
本教程将深入介绍 WebSocket 的基本概念、在客户端和服务器端的实现方式、一个完整的示例,以及 WebSocket 的优势与劣势对比。通过本教程,您将全面了解如何在自己的项目中应用 WebSocket 技术。
一、WebSocket 基本概念
1. 握手过程
WebSocket 的通信始于一个握手过程。客户端通过发送一个特殊的 HTTP 请求,包含诸如 Upgrade: websocket
和 Connection: Upgrade
等头字段,请求将连接从 HTTP 升级到 WebSocket。如果服务器同意升级,会返回一个 101 状态码的响应,握手成功后,连接即进入 WebSocket 模式,开始进行全双工通信。
2. 数据帧
握手成功后,客户端和服务器通过传输数据帧进行通信。WebSocket 数据帧可以承载文本或二进制数据,支持掩码处理以确保数据的完整性和安全性。
3. 连接管理
任何一方都可以随时发送关闭帧来终止 WebSocket 连接。通常,关闭帧包含状态码和可选的关闭原因,用于告知对方连接关闭的原因。
二、客户端使用 WebSocket
在浏览器环境中,JavaScript 提供了 WebSocket
对象,使得客户端能够轻松创建和管理 WebSocket 连接。
示例代码
以下是一个简单的客户端示例,展示如何连接到服务器、发送消息并接收服务器的响应:
// 创建一个新的 WebSocket 实例,连接到指定的 WebSocket 端点
const socket = new WebSocket('ws://example.com/socket');// 监听连接开启事件
socket.addEventListener('open', (event) => {console.log('WebSocket 连接已打开');// 向服务器发送消息socket.send('你好,服务器!');
});// 监听接收消息事件
socket.addEventListener('message', (event) => {console.log('接收到服务器消息:', event.data);
});// 监听连接关闭事件
socket.addEventListener('close', (event) => {console.log('WebSocket 连接已关闭');
});// 监听错误事件
socket.addEventListener('error', (event) => {console.error('WebSocket 发生错误:', event);
});
常用方法和属性
• new WebSocket(url)
: 创建一个新的 WebSocket 实例,连接到指定的 URL。
• send(data)
: 向服务器发送数据。
• close([code[, reason]])
: 关闭 WebSocket 连接,可以指定状态码和关闭原因。
• readyState
: 表示 WebSocket 连接的当前状态(如 CONNECTING
、OPEN
、CLOSING
、CLOSED
)。
三、服务器端使用 WebSocket
服务器端的 WebSocket 实现方式多种多样,取决于所选用的编程语言和框架。以下将以 Node.js 和 ws
库为例,介绍如何在服务器端搭建 WebSocket 服务。
示例代码(Node.js 使用 ws
库)
安装 ws
库
npm install ws
服务器代码示例
const WebSocket = require('ws');// 创建 WebSocket 服务器,监听 8080 端口
const wss = new WebSocket.Server({ port: 8080 });wss.on('connection', (ws) => {console.log('客户端已连接');// 监听来自客户端的消息ws.on('message', (message) => {console.log('接收到客户端消息:', message);// 向客户端发送回应消息ws.send(`服务器回应: ${message}`);});// 监听连接关闭事件ws.on('close', () => {console.log('客户端已断开连接');});
});
四、完整示例
以下示例展示了客户端和服务器之间简单的消息交互:客户端发送消息到服务器,服务器接收并将消息回显给客户端。
1. 服务器端(Node.js 使用 ws
)
代码同上
2. 客户端(HTML 页面)
创建一个 index.html
文件:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>WebSocket 示例</title>
</head>
<body><h1>WebSocket 测试</h1><input type="text" id="messageInput" placeholder="请输入消息"><button id="sendButton">发送</button><div id="messages"></div><script>// 创建 WebSocket 连接到本地服务器的 8080 端口const socket = new WebSocket('ws://localhost:8080');// 连接开启时的处理socket.addEventListener('open', () => {document.getElementById('messages').innerText += "连接已打开\n";});// 接收到消息时的处理socket.addEventListener('message', (event) => {document.getElementById('messages').innerText += "服务器: " + event.data + "\n";});// 连接关闭时的处理socket.addEventListener('close', () => {document.getElementById('messages').innerText += "连接已关闭\n";});// 发送按钮点击事件document.getElementById('sendButton').onclick = () => {const message = document.getElementById('messageInput').value;socket.send(message);document.getElementById('messages').innerText += "你: " + message + "\n";};</script>
</body>
</html>
使用方法:
- 启动服务器:确保在本地环境运行服务器代码(例如,在终端中执行
node server.js
,假设服务器代码保存在server.js
文件中,并且监听localhost:8080
)。 - 打开客户端页面:在浏览器中打开
index.html
文件。 - 发送消息:在输入框中输入消息并点击“发送”按钮,您将在页面上看到服务器回显的消息。
五、WebSocket 的优势与劣势对比
1. 优势
a. 实时性
WebSocket 支持全双工通信,服务器可以主动向客户端推送数据,极大地减少了延迟。与传统的轮询(Polling)或长轮询(Long Polling)相比,WebSocket 提供了更及时、更高效的数据传输方式。
b. 减少带宽消耗
由于 WebSocket 基于持久连接,避免了频繁建立和关闭连接的开销。相比之下,HTTP 轮询每次请求都需要携带完整的头部信息,消耗更多的带宽资源。
c. 简化的编程模型
WebSocket 提供了一个简单的 API,使得开发者可以方便地实现实时通信功能。不需要处理复杂的协议或状态管理,降低了开发难度。
d. 广泛的浏览器支持
现代浏览器广泛支持 WebSocket,使得 Web 应用能够轻松集成实时通信功能,提升用户体验。
2. 劣势
a. 安全性挑战
尽管 WebSocket 提供了内置的握手过程,但在实际应用中,仍需要开发者自行处理身份验证、数据加密等安全措施,以防止中间人攻击、数据泄露等安全问题。
b. 服务器资源占用
由于 WebSocket 建立的是持久连接,服务器需要同时维护大量的连接,这可能对服务器资源(如内存和处理器)造成较大压力,尤其是在用户量庞大的应用中。
c. 兼容性问题
虽然现代浏览器普遍支持 WebSocket,但在某些旧版浏览器或特定环境下,可能存在兼容性问题。这就需要开发者提供降级方案或使用兼容性库来确保功能的正常运行。
d. 管理复杂性
在分布式系统或集群环境中,管理大量的 WebSocket 连接可能变得复杂,需要额外的工具和策略来确保连接的可靠性和一致性。
六、总结
WebSocket 作为一种高效、实时的网络通信协议,为现代 Web 应用带来了强大的实时通信能力。通过理解和掌握 WebSocket 的工作原理、客户端和服务器端的实现方法,以及在项目中的优势与劣势,开发者可以合理地选择和应用 WebSocket 技术,构建高性能的实时应用。
在选择使用 WebSocket 时,应根据具体应用场景的需求,权衡其优势与可能面临的挑战,结合安全和性能等方面的考量,制定最佳的实现策略。
希望本教程能够帮助您全面理解 WebSocket,并在实际项目中有效应用。如果您有任何疑问或需要进一步的指导,请随时提问。
相关文章:
WebSocket 使用教程
WebSocket 使用教程 WebSocket 是一种在现代网络应用中广泛使用的网络通信协议,旨在实现服务器与客户端之间高效、实时的双向通信。与传统的 HTTP 协议相比,WebSocket 提供了更低的延迟和更高的互动性,使其成为构建实时应用的理想选择。无论…...
【RabbitMQ】rabbitmq在spring boot中的使用
rabbitmq官网地址:https://www.rabbitmq.com/tutorials 下面介绍rabbitmq官网中七种使用方式在spring boot中如何使用 下面是基于 Spring Boot 使用 RabbitMQ 实现这七种模式的示例代码。假设已经引入了以下依赖: Maven 依赖 <dependency><g…...
独立开发记录:使用Trae和Cloudflare快速搭建了自己的个人博客
前段时间我计划搭建个人博客,用于记录自己写的文章、录制的课程和开发的项目,于是结合 Trae AI IDE 与 Cloudflare 快速搭建并上线了人生第一个网站,在这个过程中,我整合了两种工具的优势(AI辅助开发 免费托管加速&a…...
文件解析漏洞详解
IIS解析漏洞 环境安装 windows2003iis6 IIS6.X ⽬录解析 在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。 在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件 在x.asp中新建⼀个png⽂件。内容为<%now()%> asp代码。 外部浏览器中访问windows2003的i…...
自然语言处理:文本聚类
介绍 大家好,博主又来和大家分享自然语言处理领域的知识了。今天给大家分享的内容是自然语言处理中的文本聚类。 文本聚类在自然语言处理领域占据着重要地位,它能将大量无序的文本按照内容的相似性自动划分成不同的类别,极大地提高了文本处…...
【MySQL】基本操作 —— DDL
目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…...
玩转python:通俗易懂掌握高级数据结构:collections模块之namedtuple
引言 namedtuple是Python中collections模块提供的一个强大工具,用于创建具有字段名的元组。它不仅具备元组的不可变性,还能通过字段名访问元素,极大地提高了代码的可读性和可维护性。本文将详细介绍namedtuple的关键用法和特性,并…...
[GHCTF 2025]SQL??? 【sqlite注入】
梳理一下SQLite注入 常见指令 查看版本:sqlite_version() 列出附加数据库中的所有表:.tables 注入步骤 先查字段: 1 order by 5 # 三板斧: 0 union select 1,2,sql from sqlite_master; sql字段存储创建该数据库对象时所使…...
spring boot 发送邮件验证码
一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…...
[项目]基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及移植FreeRTOS
基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及debug模块 一.项目搭建二.移植FreeRTOS 一.项目搭建 先配置SYS系统滴答定时器来源为默认,因为其他定时器用来驱动电机了只能与FreeRTOS共用: 之后选择RCC配置芯片的时钟来源: 配置时钟树&am…...
Amazon RDS ProxySQL 探索(一)
:::info 💡 在日常开发中,开发者们会涉及到数据库的连接,在使用Amazon RDS数据库时,若使用集群模式或者多数据库时,会出现一写多读多个Endpoint,在实际开发中, 开发者们配置数据库连接通常希望走…...
高速PCB设计(布线设计)
以下是针对高速PCB布线设计的综合笔记,结合用户提供的设计规范及行业通用原则整理而成: 一、关键信号布线原则 布线优先级 顺序:射频信号>中/低频信号>时钟信号>高速信号射频信号需包地处理,线…...
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
在科技飞速发展的当下,人工智能与鸿蒙系统的集成开发开辟了创新的前沿领域。这一融合不仅代表着技术的演进,更预示着智能设备生态的全新变革。而在这场技术盛宴的背后,坚实的硬件配置是确保开发顺利进行的关键,它就像一座大厦的基…...
使用Langflow和AstraDB构建AI助手:从架构设计到与NocoBase的集成
本文由 Leandro Martins 编写,最初发布于 Building an AI Assistant with Langflow and AstraDB: From Architecture to Integration with NocoBase。 引言 本文的目标是演示如何创建一个集成了 NocoBase、LangFlow 和 VectorDB 工具的 AI 助手。作为基础…...
【零基础入门unity游戏开发——unity3D篇】3D物理系统之 —— 3D刚体组件Rigidbody
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...
工程化与框架系列(30)--前端日志系统实现
前端日志系统实现 📝 引言 前端日志系统是应用监控和问题诊断的重要工具。本文将深入探讨前端日志系统的设计与实现,包括日志收集、处理、存储和分析等方面,帮助开发者构建完整的前端日志解决方案。 日志系统概述 前端日志系统主要包括以…...
小爱音箱控制家里的NAS将影片在电视上播放-deepseek帮助下实现-慎入openmanux
天始规划 我给ai一个任务,不过我没那么多能力,听说AI代理很行,这个任务我打算交给它.就用现在火的,openmanu,功能简单,我来安装openmanus,并规划任务. 进入openmanu首页 https://github.com/wjcroom/OpenManus openusa推荐使用uv管理,打算安装在家里的nas虚拟机.uv和python环…...
jQuery EasyUI 扩展
jQuery EasyUI 扩展 引言 jQuery EasyUI 是一个基于 jQuery 的易于使用的界面扩展库,它简化了网页界面的开发过程。随着 Web 技术的不断发展,越来越多的开发者开始寻求对 jQuery EasyUI 的扩展,以满足不同场景下的需求。本文将详细介绍 jQuery EasyUI 的扩展方法、技巧以及…...
笔试刷题专题(一)
文章目录 最小花费爬楼梯(动态规划)题解代码 数组中两个字符串的最小距离(贪心(dp))题解代码 点击消除题解代码 最小花费爬楼梯(动态规划) 题目链接 题解 1. 状态表示࿱…...
使用Docker部署前端应用到生产环境
前期准备 安装 Docker:确保你的开发机器和生产服务器都已经安装了 Docker。可以参考 Docker 官方安装指南 完成安装。准备前端项目:保证你的前端项目代码完整,并且能够在本地正常构建。 编写 Dockerfile Dockerfile 是用于构建 Docker 镜像…...
ES6(1) 简介与基础概念
1. ES6 简介 ES6(ECMAScript 6)是 JavaScript 的一个重要版本,它在 ES5 的基础上进行了扩展和优化。ES6 主要应用于现代 Web 开发,提高了 JavaScript 的编程效率和可读性。 2. ES6 与 JavaScript 的关系 JavaScript 是一种基于 E…...
redis数据库的介绍以及安装部署
一.redis数据库的介绍 借助nginx的upstream模块实现后端服务的负载均衡,如果后端服务采用的是会话的机制来识别客户端的身份,如果使用的调度算法是轮询算法的话,其中我们需要去做的就是实现后端服务的会话保持。 第一种换调度算法ÿ…...
MySQL数据库复杂的增删改查操作
在前面的文章中,我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子,进行讲解一些较为复杂且现时需求的例子。 基础知识: 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…...
tomcat部署springboot+vue(不使用nginx)
1、首先将springboot项目打包为war包。 注意:将application.yml文件中添加以下信息: spring.jmx.enabledfalse 避免tomcat下部署多个项目,出现org.springframework.jmx.export.UnableToRegisterMBeanException:影响项目启动。 2、前段项目打…...
Flutter 从入门到进阶:构建跨平台应用的最佳实践
引言 Flutter 是 Google 推出的一款开源 UI 框架,能够帮助开发者使用 Dart 语言构建高性能、跨平台的移动、桌面和 Web 应用。它以 “一次编写,到处运行” 的特点吸引了众多开发者。Flutter 采用自绘 UI 渲染引擎(Skia)ÿ…...
ROS实践(三)机器人描述文件xacro(urdf扩展)
目录 一、定义 二、xacro 文件常见组成部分 1. 命名空间声明 2. 定义宏 3. 调用宏 4. 定义参数 5. 条件语句 6. 转换 xacro 文件为 urdf 7. gazebo标签 三、代码示例 1. gazebo标签使用(仿真参数配置) 2. 引用仿真配置并定义机器人模型&#x…...
微信小程序从右向左无限滚动组件封装(类似公告)
组件代码 wxml代码 <view class"container"><view class"text-wrapper"><!-- 这两个都不能删除,用来放无限滚动的,第一个滚完第二个接上,第二个滚完第一个又接上了 --><text class"scroll-text text1" style"left: …...
前端面试:axios 请求的底层依赖是什么?
在前端开发中,Axios 是一个流行的 JavaScript 库,用于发送 HTTP 请求。它简化了与 RESTful APIs 的交互,并提供了许多便利的方法与配置选项。要理解 Axios 的底层依赖,需要从以下几个方面进行分析: 1. Axios 基于 XML…...
【小白向】Ubuntu|VMware 新建虚拟机后打开 SSH 服务、在主机上安装vscode并连接、配置 git 的 ssh
常常有人问VMware-Tools装了也复制粘贴不了怎么办,这个东西影响因素太多了,具体解决办法你们可以参考一下:【经验】VMware|虚拟机只能使用鼠标无法使用键盘、装不了或装了VMware-Tools无法复制粘贴的可能解决办法_增强型键盘驱动程…...
UVC摄像头命令推流,推到rv1126里面去
ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图,画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…...
Node.js 与 MongoDB:高效的企业级应用开发
Node.js 与 MongoDB:高效的企业级应用开发 引言 随着互联网技术的飞速发展,企业级应用开发的需求日益增长。作为现代Web开发的重要工具,Node.js凭借其高性能、轻量级的特点,已经成为构建高效、可扩展后端服务的首选技术之一。而MongoDB作为一种流行的NoSQL数据库,以其灵…...
【大模型学习】第十九章 什么是迁移学习
目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…...
sql-labs less-1-5wp
目录标题 less-1判断列数查找数据库和版本信息查找数据库中的表爆破users表的列爆破xx表xx列的数据 Less-2判断类型判断注释符和回显点爆破数据库和版本信息爆破security数据库的表爆破users表的列名爆破表中数据 Less-3判断类型判断注释符和回显点爆破爆破版本号和数据库爆数据…...
Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)
前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…...
在Simulink中将Excel数据导入可变负载模块的方法介绍
文章目录 数据准备与格式要求Excel数据格式MATLAB预处理数据导入方法使用From Spreadsheet模块(直接导入Excel)通过MATLAB工作区中转(From Workspace模块)使用1-D Lookup Table模块(非线性负载映射)Signal Builder模块(变载工况导入)可变负载模块配置注意事项与调试在S…...
Html5记忆翻牌游戏开发经验分享
H5记忆翻牌游戏开发经验分享 这里写目录标题 H5记忆翻牌游戏开发经验分享前言项目概述技术要点解析1. 页面布局(HTML CSS)响应式设计 2. 翻牌动画效果3. 游戏逻辑实现状态管理卡片配对检测 开发技巧总结1. 模块化设计2. 性能优化3. 用户体验 踩坑经验扩…...
Centos离线安装openssl-devel
文章目录 Centos离线安装openssl-devel1. openssl-devel是什么?2. openssl-devel下载地址3. openssl-devel安装4. 安装结果验证 Centos离线安装openssl-devel 1. openssl-devel是什么? openssl-devel 是 Linux 系统中与 OpenSSL 加密库相关的开发包&…...
Spring Boot项目中集成sa-token实现认证授权和OAuth 2.0第三方登录
OAuth 2.0第三方登录 OAuth 2.0 是一种授权协议,允许第三方应用在不暴露用户密码的情况下访问用户的资源。它通常用于第三方登录场景,例如使用GitHub、Google等社交平台进行登录。 在sa-token框架中,OAuth 2.0第三方登录可以通过集成sa-tok…...
【机器学习】迁移学习(Transfer Learning)
迁移学习(Transfer Learning)作为一种机器学习方法,主要通过将源域中学到的知识迁移到目标域,解决目标域中数据不足或标注困难的问题,尤其在无监督学习如聚类任务中具有显著优势。迁移学习的关键思想包括领域适应、知识…...
接入手机后,DeepSeek难“转正”
2025开年之后,手机圈掀起了一场诡异的AI军备竞赛——争相接入DeepSeek。随着时间的推移,这股年初的狂热已然降温。 当潮水退去之后,暴露出手机AI领域的残酷真相:市面上手机自带的AI能力,没能像DeepSeek一样,…...
全链条自研可控|江波龙汽车存储“双轮驱动”体系亮相MemoryS 2025
3月12日,MemoryS 2025在深圳盛大开幕,汇聚了存储行业的顶尖专家、企业领袖以及技术先锋,共同探讨存储技术的未来发展方向及其在商业领域的创新应用。江波龙董事长、总经理蔡华波先生受邀出席,并发表了题为《存储商业综合创新》的主…...
宇树ROS1开源模型在ROS2中Gazebo中仿真
以GO1为例 1. CMakelists.txt更新语法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…...
ubuntu 24 安装 python3.x 教程
目录 注意事项 一、安装不同 Python 版本 1. 安装依赖 2. 下载 Python 源码 3. 解压并编译安装 二、管理多个 Python 版本 1. 查看已安装的 Python 版本 2. 配置环境变量 3. 使用 update-alternatives 管理 Python 版本 三、使用虚拟环境为项目指定特定 Python 版本…...
Python数据类型进阶——详解
—— 小 峰 编 程 目录 1.整型 1.1 定义 1.2 独有功能 1.3 公共功能 1.4 转换 1.5 其他 1.5.1 长整型 1.5.2 地板除(除法) 2. 布尔类型 2.1 定义 2.2 独有功能 2.3 公共功能 2.4 转换 2.5 其他 做条件自动转换 3.字符串类型 3.1 定义 3.2 独有功能…...
Flutter 按钮组件 TextButton 详解
目录 1. 引言 2. TextButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改文本颜色 4.2 添加背景色 4.3 修改按钮形状和边距 4.4 样式定制 5. 高级应用技巧 5.1 图标文本组合 5.2 主题统一配置 5.3 动态交互 6. 性能优化与注意事项 6.1 点击区域优化 6.…...
设置IDEA的内存
如何设置 IntelliJ IDEA 的内存以提升性能 一、引言 IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),广泛应用于 Java、Kotlin、Scala 等多种编程语言的开发。它以其丰富的功能、智能的代码提示和高效的项目管理能力深受开发者喜爱。然而&…...
python编写的一个打砖块小游戏
游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…...
MySQL异常SQL排查
0、明确数据库异常SQL执行时间段,正常情况下耗时,当前耗时,如何感知到数据库慢的,是哪种类型的SQL,近期有做过相关的变更吗 1、检查数据库服务器的io iostat //查看延迟、读、写流量 sar -d /var/log/sa/sar日期 …...
AI智能代码疫苗技术,赋能数字化应用内生安全自免疫
“DevSecOps市占率持续领先,IAST探针覆盖率十倍增长,代码疫苗技术已成功帮助上千家行业用户成功抵御‘Log4j2.x’等重大未知漏洞的利用攻击。”子芽在腾讯专访中透露。 这是2021年悬镜安全交出的一张成绩单。悬镜安全是DevSecOps敏捷安全先行者…...
ASP.NET Webform和ASP.NET MVC 后台开发 大概80%常用技术
本文涉及ASP.NET Webform和ASP.NET MVC 后台开发大概80%技术 2019年以前对标 深圳22K左右 广州18K左右 武汉16K左右 那么有人问了2019年以后的呢? 答:吉祥三宝。。。 So 想继续看下文的 得有自己的独立判断能力。 C#.NET高级笔试题 架构 优化 性能提…...