WebSocket 详解:全双工通信的实现与应用
目录
一、什么是 WebSocket?(简介)
二、为什么需要 WebSocket?
三、HTTP 与 WebSocket 的区别
WebSocket 的劣势
WebSocket 的常见应用场景
WebSocket 握手过程
WebSocket 事件处理和生命周期
一、什么是 WebSocket?(简介)
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。通过 WebSocket API,浏览器和服务器只需完成一次握手,即可建立持久性连接,开始双向数据传输。
二、为什么需要 WebSocket?
(一)HTTP 的局限性
HTTP 协议是基于请求-响应模式设计的,适用于静态页面交互,但对于实时通信,它存在以下几个问题:
- 单向通信:HTTP 协议是单向的,客户端必须发起请求,服务器才能响应。服务器无法主动向客户端推送消息。
- 高延迟:为了获取最新数据,客户端需要不断地发送请求(轮询)检查是否有新数据。这会造成明显的延迟,无法满足实时通信需求。
- 资源浪费:即使使用长轮询,服务器也需要保持连接直至有新数据可发送,消耗大量服务器资源。频繁的请求还会浪费带宽和服务器处理能力。
(二)WebSocket 的优势
-
全双工通信
WebSocket 支持双向通信,客户端和服务器可以在同一个连接上同时发送和接收消息。与 HTTP 单向请求-响应模式相比,WebSocket 提供了更高效的通信机制,特别适用于需要频繁数据交换的场景。 -
长连接
WebSocket 建立连接后会保持连接持续开启,直到客户端或服务器主动关闭连接。相比 HTTP 中频繁的连接建立和断开,WebSocket 通过长连接提高了性能,减少了开销。 -
低延迟
WebSocket 在建立连接后,消息传输延迟极低。服务器可以主动推送数据给客户端,避免了客户端频繁请求的延迟。 -
减少网络开销
- 减少握手和头部信息:WebSocket 的握手过程只发生在连接建立时,之后数据帧的头部信息较小。相比之下,HTTP 的每个请求都需要携带完整的头部,开销较大。
- 减少带宽消耗:WebSocket 显著减少了带宽消耗,尤其在与 HTTP 轮询或长轮询相比时,WebSocket 可以更加高效地利用网络资源。
5.其他优点
-
实时功能的实现
WebSocket 天然支持实时功能,例如:- 实时消息推送
- 实时互动(如在线聊天)
- 数据同步等
-
支持二进制数据
WebSocket 不仅支持传输文本数据,还能高效地处理二进制数据(如图像、音频、视频等),这使得它在多媒体应用中表现尤为优秀。 -
跨平台支持
WebSocket 是一种标准协议,被广泛支持于各种语言、框架和平台(如 JavaScript、Python、Java 等)。无论是前端浏览器还是后端服务器,都可以轻松实现 WebSocket 功能。 -
安全性
WebSocket 支持通过 TLS/SSL 协议的 WSS 保障数据传输的安全性。此外,还可以结合身份验证机制(如 JWT)或 IP 限制等措施来防止滥用。
三、HTTP 与 WebSocket 的区别
特点 | WebSocket | HTTP |
---|---|---|
通信方式 | 双向通信 | 单向请求/响应模式 |
连接类型 | 长连接,连接保持打开 | 短连接,每次请求需新建连接 |
实时性 | 高,低延迟 | 中等,轮询或长轮询增加延迟 |
效率 | 数据传输轻量,性能高 | 每次请求头部信息冗余,开销大 |
适用场景 | 实时推送、聊天、游戏、物联网等 | 静态内容加载、API 调用 |
WebSocket 的劣势
-
复杂性较高
- 协议实现复杂:与传统的 HTTP 模型相比,WebSocket 协议需要额外的握手过程,并且要求服务器支持 WebSocket 协议。
- 开发难度:实现双向通信的逻辑,并处理连接生命周期、断线重连等问题,增加了开发难度。
-
资源消耗
- 连接资源占用:WebSocket 需要长期占用服务器的连接资源,尤其在高并发场景中,服务器需维护大量的长连接,可能导致资源消耗增加。
- 客户端性能开销:在移动设备或低性能设备上,保持 WebSocket 连接可能增加电量和网络资源消耗。
-
安全性问题
- 身份认证不足:WebSocket 本身没有内置身份认证机制,需要额外实现安全验证(如使用 JWT 或 API Key)。
- 攻击风险:如 DDoS 攻击、WebSocket 劫持、跨站点攻击等安全问题需要额外关注。
-
协议的兼容性问题
协议版本:虽然 WebSocket 是标准化协议,但与某些技术栈或库的版本不兼容可能会导致问题(例如旧版客户端和新版服务器之间的不兼容)。
WebSocket 的常见应用场景
-
实时聊天
WebSocket 提供双向、实时的通信机制,适用于即时通讯应用,如聊天应用,使得消息能够迅速、可靠地传递。 -
实时协作
用于实时协作工具,例如在线文档编辑、白板绘画、团队任务管理等,团队成员可以在同一页面上进行实时互动和更新。 -
实时数据推送
用于股票行情、新闻快讯、实时天气信息等实时数据推送,服务器可以及时将数据推送给客户端,确保数据的及时性。 -
多人在线游戏
实时双向通信机制适用于多人在线游戏应用,使得游戏服务器可以实时地传输游戏状态和玩家行为,确保游戏的实时互动。 -
在线客服
WebSocket 可以用于在线客服系统,提供即时响应,减少等待时间,提升用户体验。
WebSocket 握手过程
WebSocket 握手过程是客户端和服务器建立 WebSocket 连接的关键步骤,包含以下几个阶段:
-
客户端发起握手请求
客户端通过 HTTP 协议向服务器发起 WebSocket 握手请求,包含特殊的请求头字段,要求将连接从 HTTP 协议升级为 WebSocket 协议。主要请求头:
Upgrade: websocket
:请求升级协议为 WebSocket。Connection: Upgrade
:表明希望升级连接。Sec-WebSocket-Key
:一个随机生成的 Base64 编码的字符串,用于协议安全性验证。Sec-WebSocket-Version
:表示支持的 WebSocket 协议版本。Origin
:可选,表示请求来源,防止跨站点攻击。
-
服务器响应握手请求
服务器在接收到握手请求后,如果支持 WebSocket 协议,并同意协议升级,则返回 101 状态码,表示协议切换成功。主要响应头:
HTTP/1.1 101 Switching Protocols
:表明协议已切换。Sec-WebSocket-Accept
:服务器用 SHA-1 加密客户端提供的Sec-WebSocket-Key
,并返回一个 Base64 编码后的值。
-
WebSocket 连接建立
客户端收到响应后确认协议切换成功,WebSocket 连接正式建立。 -
数据交换
连接建立后,客户端和服务器可以通过 WebSocket 协议进行高效的双向通信。 -
连接关闭
连接可由客户端或服务器发起关闭。WebSocket 协议定义了一个关闭帧,包含状态码表示关闭原因。
WebSocket 事件处理和生命周期(方法使用介绍)
WebSocket 连接的生命周期包括以下几个主要事件:
-
onopen:连接成功时触发
WebSocket 连接成功建立后,onopen
事件触发,客户端可以开始发送数据。
作用:在连接建立时执行一些初始化操作(如发送第一个消息,记录日志等)。let ws = new WebSocket('ws://example.com/socket'); ws.onopen = function(event) {console.log('Connection established');ws.send('Hello Server'); };
-
onmessage:接收到消息时触发
每当服务器发送消息时,onmessage
事件触发,客户端可以处理消息。
作用:用于处理服务器发来的数据。event.data
包含服务器传来的消息内容。ws.onmessage = function(event) {console.log('Received message:', event.data); };
-
onclose:连接关闭时触发
当 WebSocket 连接关闭时,onclose
事件触发,可以进行清理操作。
作用:用于执行清理操作,如更新 UI 状态或重新连接等。ws.onclose = function(event) {if (event.was
-
onerror:发生错误时触发
onerror 事件在 WebSocket 连接出现错误时触发。
作用:用于捕获并处理 WebSocket 的错误,可能包括连接失败、数据传输失败等。let ws = new WebSocket('ws://example.com/socket'); ws.onerror = function(event) {console.error('WebSocket error:', event); };
WebSocket 心跳机制
详细参考下面博客:
https://blog.csdn.net/Future_yzx/article/details/145359554?sharetype=blogdetail&sharerId=145359554&sharerefer=PC&sharesource=Future_yzx&spm=1011.2480.3001.8118https://blog.csdn.net/Future_yzx/article/details/145359554?sharetype=blogdetail&sharerId=145359554&sharerefer=PC&sharesource=Future_yzx&spm=1011.2480.3001.8118
总结
WebSocket 是一种强大的协议,适用于需要实时通信的应用场景。尽管在实现和资源消耗上有一定的不足,但高效、低延迟和实时性,使得它在现代网络应用中得到了广泛应用。
相关文章:
WebSocket 详解:全双工通信的实现与应用
目录 一、什么是 WebSocket?(简介) 二、为什么需要 WebSocket? 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket…...
【漫话机器学习系列】064.梯度下降小口诀(Gradient Descent rule of thume)
梯度下降小口诀 为了帮助记忆梯度下降的核心原理和关键注意事项,可以用以下简单口诀来总结: 1. 基本原理 损失递减,梯度为引:目标是让损失函数减少,依靠梯度指引方向。负梯度,反向最短:沿着负…...
Vue 3 中的 TypeScript:接口、自定义类型与泛型
在 Vue 3 中,TypeScript 提供了强大的类型系统,帮助我们更好地管理代码的类型安全。通过使用 接口(Interface)、自定义类型(Type Aliases) 和 泛型(Generics),我们可以编…...
[SaaS] 内容创意生产平台
1.即梦 2.讯飞绘镜 typemovie 3.Krea.ai 4.Pika 5.runway 6.pixVerse 7....
低代码系统-产品架构案例介绍、明道云(十一)
明道云HAP-超级应用平台(Hyper Application Platform),其实就是企业级应用平台,跟微搭类似。 通过自设计底层架构,兼容各种平台,使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深…...
2025年1月26日(超声波模块:上拉或下拉电阻)
添加上拉或下拉电阻是在电子电路设计和嵌入式系统编程中常用的一种技术手段,下面为你详细解释其含义、作用和应用场景。 基本概念 在数字电路里,引脚的电平状态通常有高电平(逻辑 1)和低电平(逻辑 0)两种…...
【自然语言处理(NLP)】深度循环神经网络(Deep Recurrent Neural Network,DRNN)原理和实现
文章目录 介绍深度循环神经网络(DRNN)原理和实现结构特点工作原理符号含义公式含义 应用领域优势与挑战DRNN 代码实现 个人主页:道友老李 欢迎加入社区:道友老李的学习社区 介绍 **自然语言处理(Natural Language Pr…...
C语言学习阶段性总结(五)---函数
函数构成五要素: 1、返回值类型 2、函数名 3、参数列表(输入) 4、函数体 (算法) 5、返回值 (输出) 返回值类型 函数名 (参数列表) { 函数体; return 返回值; } void 类型…...
C++初阶—string类
第一章:为什么要学习string类 1.1 C语言中的字符串 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想&…...
Solon Cloud Gateway 开发:Route 的过滤器与定制
RouteFilterFactory 是专为路由过滤拦截处理设计的接口。对应路由配置 filters 1、内置的路由过滤器 过滤器工厂本置前缀说明与示例AddRequestHeaderFilterFactoryAddRequestHeader添加请求头 (AddRequestHeaderDemo-Ver,1.0)AddResponseHeaderFilterFactoryAddResponseHeade…...
【MySQL】 数据类型
欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】 数据类型 发布时间:2025.1.27 隶属专栏:MySQL 目录 数据类型分类数值类型tinyint类型数值越界测试结果说明 bit类型基本语法使用注意事项 小数类型float语法使用注意事项 decimal语…...
基于vue和elementui的简易课表
本文参考基于vue和elementui的课程表_vue实现类似课程表的周会议列表-CSDN博客,原程序在vue3.5.13版本下不能运行,修改两处: 1)slot-cope改为v-slot 2)return background-color:rgb(24 144 255 / 80%);color: #fff; …...
vim的多文件操作
[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明:快捷键ctrlshift^,…...
spring spring-boot spring-cloud发布以及适配
https://spring.io/blog/2024/10/01/from-spring-framework-6-2-to-7-0 看了 spring 的官网,提到 2025 年 spring 会跟随 jdk 25 LTS发布后,接着发布 Spring Framework 7.0 GA,与之对应 spring 系列的组件版本情况如下。 Spring Framework版…...
【快速上手】阿里云百炼大模型
为了创建自己的知识库,本文介绍一下阿里云的百炼大模型,方便大家快速上手!快速查询自己想要的内容。 一、入口页 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 二、大模型的选择 首先前提条件是 1、账号不能欠费 2、需…...
Linux:多线程[2] 线程控制
了解: Linux底层提供创建轻量级进程/进程的接口clone,通过选择是否共享资源创建。 vfork和fork都调用的clone进行实现,vfork和父进程共享地址空间-轻量级进程。 库函数pthread_create调用的也是底层的clone。 POSIX线程库 与线程有关的函数构…...
010 mybatis-PageHelper分页插件
文章目录 添加依赖配置PageHelper项目中使用PageHelper注意事项 PageHelper分页插件介绍 https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md 使用方法 添加依赖 <dependency><groupId>com.github.pagehelper</groupId>&l…...
【huawei】云计算的备份和容灾
目录 1 备份和容灾 2 灾备的作用? ① 备份的作用 ② 容灾的作用 3 灾备的衡量指标 ① 数据恢复时间点(RPO,Recoyery Point Objective) ② 应用恢复时间(RTO,Recoyery Time Objective) 4…...
CVE-2023-38831 漏洞复现:win10 压缩包挂马攻击剖析
目录 前言 漏洞介绍 漏洞原理 产生条件 影响范围 防御措施 复现步骤 环境准备 具体操作 前言 在网络安全这片没有硝烟的战场上,新型漏洞如同隐匿的暗箭,时刻威胁着我们的数字生活。其中,CVE - 2023 - 38831 这个关联 Win10 压缩包挂…...
回顾:Maven的环境搭建
1、下载apache-maven-3.6.0 **网址:**http://maven.apache.org 然后解压到指定的文件夹(记住文件路径) 2、配置Maven环境 复制bin文件夹 的路径D:\JavaTool\apache-maven-3.6.0\bin 环境配置成功 3、检查是否配置成功 winR 输入cmd 命令行输入mvn -v…...
从零到全栈开发
HTML:超文本标记语言 CSS:层叠样式表 HTML可以理解为框架----(毛坯房) CSS 可以理解为装修----(装修) 学习工具: Vscode应用----扩展(中文) AI ----KiMi ,豆…...
单片机-STM32 WIFI模块--ESP8266 (十二)
1.WIFI模块--ESP8266 名字由来: Wi-Fi这个术语被人们普遍误以为是指无线保真(Wireless Fidelity),并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词,Wi-Fi还出现在ITAA的一个论文中。…...
两种交换排序算法--冒泡,快速
目录 1.冒泡排序原理 2.快速排序原理 3.冒泡代码实现 4.快速排序代码实现 1.冒泡排序原理 冒泡排序(Bubble Sort)是一种简单的排序算法,基本思想是通过反复交换相邻的元素,直到整个序列有序。它的名字来源于较大的元素像气泡…...
langchain基础(一)
模型又可分为语言模型(擅长文本补全,输入和输出都是字符串)和聊天模型(擅长对话,输入时消息列表,输出是一个消息)两大类。 以调用openai的聊天模型为例,先安装langchain_openai库 1…...
【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)
能源、电力与先进热力系统设计是指结合物理理论、工程技术和计算机模拟,对能源转换、利用和传输过程进行设计的学科领域。它涵盖了从能源的生产到最终的利用整个流程,旨在提高能源利用效率,减少能源消耗和环境污染。 重要信息 官网…...
MyBatis框架基础学习及入门案例(2)
目录 一、数据库建表(tb_user)以及添加数据。 (1)数据库与数据表说明。 (2)字段与数据说明。 二、创建模块(或工程)、导入对应所需依赖坐标。 三、编写MyBatis核心主配置文件。(解决JDBC中"硬编码"问题) (1&…...
Salesforce Too Many Email Invocations: 11
在 Salesforce 中,“Too Many Email Invocations: 11” 错误通常表示您的组织在单个事务中超过了 Apex 电子邮件调用的限制。Salesforce 设置这些限制是为了防止滥用并确保公平使用。以下是解决该问题的方法: 理解限制 Salesforce 允许每个事务中最多进…...
2274. 不含特殊楼层的最大连续楼层数
2274. 不含特殊楼层的最大连续楼层数 题目链接:2274. 不含特殊楼层的最大连续楼层数 代码如下: class Solution { public:int maxConsecutive(int bottom, int top, vector<int>& special) {ranges::sort(special);int res max(special[0] …...
RGB 转HSV空间颜色寻找色块
文章目录 前言一、绿色确定二、红色确定总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 将RGB颜色空间转换为HSV颜色空间以寻找颜色,主要基于以下几个原因: 直观性: HSV颜色空间更符合人类…...
Kafka生产者ACK参数与同步复制
目录 生产者的ACK参数 ack等于0 ack等于1(默认) ack等于-1或all Kafka的同步复制 使用误区 生产者的ACK参数 Kafka的ack机制可以保证生产者发送的消息被broker接收成功。 Kafka producer有三种ack机制 ,分别是 0,1…...
计算机图形学试题整理(期末复习/闭or开卷/>100道试题/知识点)
1.各种坐标变换,会产生变换前后维度改变的是(投影变换)。 A)建模变换;B)观察变换;C)投影变换;D)视口变换 不同的坐标变换对维度的影响如下: 建模…...
Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU
Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU 前言一、环境准备1.1 验证驱动状态 二、安装NVIDIA Container Toolkit2.1 添加官方仓库2.2 执行安装 三、配置Docker运行时3.1 更新Docker配置 四、验证安装结果4.1 运行测试容器 五、实战应用 …...
python3+TensorFlow 2.x(三)手写数字识别
目录 代码实现 模型解析: 1、加载 MNIST 数据集: 2、数据预处理: 3、构建神经网络模型: 4、编译模型: 5、训练模型: 6、评估模型: 7、预测和可视化结果: 输出结果ÿ…...
aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk
aws(学习笔记第二十六课) 使用aws Elastic Beanstalk 学习内容: AWS Elastic Beanstalk整体架构AWS Elastic Beanstalk的hands onAWS Elastic Beanstalk部署node.js程序包练习使用AWS Elastic Beanstalk的ebcli 1. AWS Elastic Beanstalk整体架构 官方的guide AWS…...
GestureDetector组件的功能与用法
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了ListView响应事件的内容,本章回中将介绍GestureDetector Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的GestureDetector是一个事件响应Widget,它可以响应双击事件&…...
【HuggingFace项目】:Open-R1 - DeepSeek-R1 大模型开源复现计划
项目链接:https://github.com/huggingface/open-r1 概述 Open-R1 是由 HuggingFace 发布的一个完全开放的项目,旨在通过三个主要步骤复现 DeepSeek-R1 的完整训练流程。这个项目的目标是让更多人能够理解和使用 DeepSeek-R1 的技术方案,从而…...
K8S中数据存储之配置存储
配置存储 在Kubernetes中,ConfigMap和Secret是两种核心资源,用于存储和管理应用程序的配置数据和敏感信息。理解它们的功能和最佳实践对于提高Kubernetes应用程序的安全性和配置管理的效率至关重要。 ConfigMap ConfigMap是一种API对象,允许…...
群辉折腾日记【连续剧】
安装群辉6.23版本 对比不同的版本以及自己的硬件条件,我选择了6.2.3稳定养老版本,硬件参数可以看之前的文章:pve (群辉、软路由、win/linux)折腾日记 之前年轻气盛喜欢折腾,秉持着一个原则,可以不用,但不能…...
AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓,而慕尼黑大学同样不容小觑,…...
Hadoop 与 Spark:大数据处理的比较
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
VB6.0 显示越南语字符
近期接到客户咨询,说是VB6.0写软件界面上显示越南语乱码,需要看看怎样解决。 我在自己电脑上也试了下,确实显示越南语结果是乱码。编辑器里乱码,运行起来界面上也是乱码。 经过一天的折腾,算是解决了问题,…...
微信小程序中实现进入页面时数字跳动效果(自定义animate-numbers组件)
微信小程序中实现进入页面时数字跳动效果 1. 组件定义,新建animate-numbers组件1.1 index.js1.2 wxml1.3 wxss 2. 使用组件 1. 组件定义,新建animate-numbers组件 1.1 index.js // components/animate-numbers/index.js Component({properties: {number: {type: Number,value…...
网络仿真工具Core环境搭建
目录 安装依赖包 源码下载 Core安装 FAQ 下载源码TLS出错误 问题 解决方案 找不到dbus-launch 问题 解决方案 安装依赖包 调用以下命令安装依赖包 apt-get install -y ca-certificates git sudo wget tzdata libpcap-dev libpcre3-dev \ libprotobuf-dev libxml2-de…...
JavaScript 的 Promise 对象和 Promise.all 方法的使用
JavaScript 中的 Promise 对象 什么是 Promise? Promise 是一种用于处理异步操作的对象。它代表一个尚未完成但预计将来会完成的操作及其结果。 主要特点: 状态: Pending(进行中): 初始状态,既未成功,也未失败。Fu…...
农产品价格报告爬虫使用说明
农产品价格报告爬虫使用说明 # ************************************************************************** # * * # * 农产品价格报告爬虫 …...
Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
实战Linux Swap扩展分区
文章目录 定义命令格式案例注释 定义 Swap分区是Linux系统中的一种虚拟内存实现方式,它是磁盘上预留的专用区域。当系统的物理内存不足时,会将部分不活跃的数据从物理内存移动到Swap分区,从而释放更多可用内存空间。 命令格式 关闭Swap分区…...
doris:Parquet导入数据
本文介绍如何在 Doris 中导入 Parquet 格式的数据文件。 支持的导入方式 以下导入方式支持 Parquet 格式的数据导入: Stream LoadBroker LoadINSERT INTO FROM S3 TVFINSERT INTO FROM HDFS TVF 使用示例 本节展示了不同导入方式下的 Parquet 格式使用方法…...
Synology 群辉NAS安装(6)安装mssql
Synology 群辉NAS安装(6)安装mssql 写在前面mssql 2019:成功安装说明,这个最终成功了 mssql 2022没有成功1. pull image2.启动mssql docker container 远程连接 写在前面 mssq是一个重要节点。 这是因为我对mysql没有一丝好感。虽然接触了许…...
使用.NET 8构建高效的时间日期帮助类
使用.NET 8构建高效的时间日期帮助类 在现代Web应用程序中,处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析,正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效…...