C#OPC(下)
安装 OPC UA SDK
通过 NuGet 包管理器,在 Visual Studio 中右键单击项目名称,选择 “管理 NuGet 程序包”,在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”,找到对应的 OPC UA SDK 包后点击 “安装”,将其集成到 C# 项目中。
它和OPC安装流程一样。
配置 OPC UA 客户端应用程序
-
创建一个
ApplicationConfiguration
对象,用于配置 OPC UA 客户端的应用程序名称、应用程序 URI、产品 URI、安全配置等信息。例如:
ApplicationConfiguration config = new ApplicationConfiguration()
{ApplicationName = "OPC UA Client",ApplicationUri = "urn:localhost:OPC-UA-Client",ProductUri = "urn:OPC-UA-Client",SecurityConfiguration = new SecurityConfiguration{ApplicationCertificate = new CertificateIdentifier{StoreType = "Directory",StorePath = @"C:\OPC_UA_Client_Certificates",SubjectName = "OPC-UA-Client"}},TransportConfigurations = new TransportConfigurationCollection(),ClientConfiguration = new ClientConfiguration()
};
config.Validate(ApplicationType.Client);
连接到 OPC UA 服务器
-
使用
EndpointDescription
类指定 OPC UA 服务器的端点地址,格式通常为 “opc.tcp:// 服务器 IP 地址:端口号”。例如:EndpointDescription endpointDescription = EndpointDescription.Create("opc.tcp://localhost:4840");
EndpointDescription endpointDescription = EndpointDescription.Create("opc.tcp://localhost:4840");
-
创建
EndpointConfiguration
和ConfiguredEndpoint
对象,用于配置和定义连接到服务器的端点。
EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(config);
ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);
-
使用
Session.Create
方法创建一个 OPC UA 会话,用于与服务器进行通信。
Session session = Session.Create(config, endpoint, false, "OPC-UA-Client", 60000, new UserIdentity(new AnonymousIdentityToken()), null).Result;
读取设备数据
-
确定要读取的设备数据对应的 OPC UA 节点 ID,可以通过设备的文档或在 OPC UA 服务器的地址空间中查找获得。例如,假设要读取一个名为 “ns=2;s=Demo.Static.Scalar.Double” 的节点的值:
NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Double");
DataValue dataValue = session.ReadValue(nodeId);
Console.WriteLine($"Node Value: {dataValue.Value}");
写入设备数据
-
确定要写入的设备数据对应的 OPC UA 节点 ID 和要写入的值。例如,要向一个名为 “ns=2;s=Demo.Static.Scalar.Int” 的节点写入整数值 100:
NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Int");
DataValue dataValue = new DataValue(100);
session.WriteValue(nodeId, dataValue);
订阅数据变更和处理事件
-
使用
MonitoredItem
类创建一个监控项,指定要监控的节点 ID 和监控模式等。例如:
NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Double");
MonitoredItem monitoredItem = new MonitoredItem(session.DefaultSubscription,1000,nodeId,MonitoringMode.Reporting,null);
monitoredItem.Notification += OnDataChange;
session.DefaultSubscription.AddItem(monitoredItem);
session.DefaultSubscription.ApplyChanges();
-
在事件处理方法中处理数据变更通知。例如:
private static void OnDataChange(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args)
{DataValue dataValue = args.NotificationValue;Console.WriteLine($"Data changed: {dataValue.Value}");
}
断开与 OPC UA 服务器的连接
当不再需要与 OPC UA 服务器通信时,调用session.Close
方法关闭会话,释放资源。例如:
session.Close();
OPC-UA协议通信
using Opc.Ua;
using Opc.Ua.Client;
using System;
using System.Threading.Tasks;class OpcUaClient
{private static ApplicationConfiguration config;private static Session session;static async Task Main(){// 配置应用程序config = new ApplicationConfiguration(){ApplicationName = "OPC UA Client",ApplicationUri = "urn:localhost:OPC-UA-Client",ProductUri = "urn:OPC-UA-Client",SecurityConfiguration = new SecurityConfiguration{ApplicationCertificate = new CertificateIdentifier{StoreType = "Directory",StorePath = @"C:\OPC_UA_Client_Certificates",SubjectName = "OPC-UA-Client"}},TransportConfigurations = new TransportConfigurationCollection(),ClientConfiguration = new ClientConfiguration()};config.Validate(ApplicationType.Client);// 尝试连接到服务器try{await ConnectToServer("opc.tcp://localhost:4840");Console.WriteLine("Connected to OPC UA Server.");// 读取数据await ReadData();// 写入数据await WriteData();// 订阅数据await SubscribeData();Console.WriteLine("Press any key to exit...");Console.ReadKey();// 关闭会话await DisconnectFromServer();}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");}}// 连接到服务器static async Task ConnectToServer(string endpointUrl){EndpointDescription endpointDescription = EndpointDescription.Create(endpointUrl);EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(config);ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);session = await Session.Create(config, endpoint, false, "OPC-UA-Client", 60000, new UserIdentity(new AnonymousIdentityToken()), null);}// 读取数据static async Task ReadData(){NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Double");DataValue dataValue = await session.ReadValueAsync(nodeId);Console.WriteLine($"Read value from node {nodeId}: {dataValue.Value}");}// 写入数据static async Task WriteData(){NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Int");DataValue dataValue = new DataValue(100);await session.WriteValueAsync(nodeId, dataValue);Console.WriteLine($"Wrote value to node {nodeId}");}// 订阅数据static async Task SubscribeData(){NodeId nodeId = new NodeId("ns=2;s=Demo.Static.Scalar.Double");MonitoredItem monitoredItem = new MonitoredItem(session.DefaultSubscription,1000,nodeId,MonitoringMode.Reporting,null);monitoredItem.Notification += OnDataChange;session.DefaultSubscription.AddItem(monitoredItem);await session.DefaultSubscription.ApplyChangesAsync();Console.WriteLine($"Subscribed to node {nodeId}");}// 处理数据变更事件private static void OnDataChange(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args){DataValue dataValue = args.NotificationValue;Console.WriteLine($"Data changed: {dataValue.Value}");}// 断开连接static async Task DisconnectFromServer(){if (session!= null){await session.CloseAsync();Console.WriteLine("Disconnected from OPC UA Server.");}}
}
OPC-UA实例解释:
-
配置应用程序:
-
ApplicationConfiguration
对象用于配置客户端的各种信息,包括应用程序名称、URI、安全配置等。 -
SecurityConfiguration
部分指定了证书存储的类型、路径和主题名称,确保安全通信。 -
config.Validate(ApplicationType.Client)
用于验证客户端配置是否正确。
-
-
连接到服务器:
-
ConnectToServer
方法根据提供的端点 URL 创建端点描述和配置,然后使用Session.Create
创建会话。 -
端点 URL 格式为
opc.tcp://服务器IP地址:端口号
,使用AnonymousIdentityToken
作为用户身份令牌。
-
-
读取数据:
-
ReadData
方法使用NodeId
指定要读取的节点,然后使用session.ReadValueAsync
方法异步读取该节点的值。 -
NodeId
包含节点的命名空间索引和标识符,通过它可以唯一确定一个节点。
-
-
写入数据:
-
WriteData
方法使用NodeId
指定要写入的节点,并创建一个包含要写入值的DataValue
对象。 -
然后使用
session.WriteValueAsync
方法将该值写入节点。
-
-
订阅数据:
-
SubscribeData
方法使用MonitoredItem
类创建一个监控项,指定要监控的节点和监控模式。 -
monitoredItem.Notification += OnDataChange
注册一个事件处理程序,当数据变化时触发OnDataChange
方法。 -
session.DefaultSubscription.ApplyChangesAsync()
将订阅更改应用到会话。
-
-
数据变更事件处理:
-
OnDataChange
方法接收MonitoredItemNotificationEventArgs
,从中提取数据值并输出。
-
-
断开连接:
-
DisconnectFromServer
方法使用session.CloseAsync
关闭会话。
-
使用说明:
-
确保在运行代码前,已经在
C:\OPC_UA_Client_Certificates
目录下配置了相应的证书(或者根据实际情况修改证书存储路径)。 -
代码中假定 OPC UA 服务器的端点为
opc.tcp://localhost:4840
,请根据实际服务器信息修改。 -
代码中的节点
ns=2;s=Demo.Static.Scalar.Double
和ns=2;s=Demo.Static.Scalar.Int
仅为示例,需根据实际服务器中的节点进行修改。
这个示例展示了如何使用 C# 和 OPC UA 进行基本的连接、读取、写入和订阅操作。
OPC-UA协议通信注意事项
安全方面
-
证书管理:OPC UA 通常依赖于证书进行身份验证和加密。确保正确配置客户端和服务器的证书,包括证书的生成、存储和加载。如果证书配置错误或不匹配,可能导致连接失败或安全漏洞,如在客户端配置中指定正确的证书存储路径和证书主题名称。
-
用户身份验证:根据服务器的安全策略,可能需要提供有效的用户身份信息进行登录。除了匿名访问外,还可能涉及用户名 / 密码、X.509 证书等多种身份验证方式,要确保正确处理身份验证过程,以获取相应的访问权限。
-
网络安全:由于 OPC UA 通信通常在网络环境中进行,要确保网络的安全性,如使用防火墙限制对 OPC UA 端口的访问,只允许授权的 IP 地址连接到 OPC UA 服务器,防止网络攻击和未经授权的访问。
连接与配置
-
端点配置:正确配置 OPC UA 服务器的端点地址,包括协议(如 opc.tcp://)、服务器 IP 地址和端口号等。如果端点配置错误,将无法建立连接,可通过网络配置工具或咨询服务器管理员获取准确的端点信息。
-
会话管理:合理地创建、使用和关闭会话。在使用完会话后及时关闭,以释放资源并确保与服务器的连接状态正确维护,避免出现资源浪费或连接异常的情况。
-
性能调优:根据实际应用场景,可能需要调整 OPC UA 客户端的性能相关配置,如设置合适的会话超时时间、操作超时时间、订阅采样间隔等,以平衡通信效率和系统资源消耗。
数据处理
-
数据类型映射:OPC UA 中的数据类型与 C# 中的数据类型可能不完全一致,需要进行正确的映射。在读取和写入数据时,确保将 OPC UA 数据类型正确转换为 C# 中的相应数据类型,反之亦然,以避免数据错误或丢失。
-
数据一致性:在进行批量数据读写或订阅多个节点时,要注意数据的一致性和同步性,确保在处理数据时不会出现数据冲突或不一致的情况,特别是在多线程或异步操作的环境中。
-
错误处理:在数据读写和订阅过程中,可能会出现各种错误,如节点不存在、权限不足、网络故障等。要全面地捕获和处理这些错误,提供清晰的错误提示和相应的处理机制,以提高系统的稳定性和可靠性。
兼容性与版本
-
OPC UA 规范版本:确保客户端和服务器都遵循相同版本的 OPC UA 规范,不同版本之间可能存在功能和数据结构的差异,导致通信问题或功能不兼容,必要时进行协议版本的适配和升级。
-
库版本兼容性:使用的 OPC UA 客户端库要与项目的其他依赖库和目标运行环境兼容,避免出现版本冲突或不兼容的情况,及时更新库版本以获取最新的功能和修复已知的问题。
内存管理
-
资源释放:在使用 OPC UA 相关对象,如会话、订阅、监控项等时,要及时释放它们占用的内存和系统资源,特别是在长时间运行的应用程序中,防止内存泄漏导致系统性能下降甚至崩溃。
-
大型数据处理:当处理大量的 OPC UA 数据时,要注意内存的使用情况,避免一次性加载过多数据导致内存溢出,可以采用分页、缓存等策略优化内存使用。
相关文章:
C#OPC(下)
安装 OPC UA SDK 通过 NuGet 包管理器,在 Visual Studio 中右键单击项目名称,选择 “管理 NuGet 程序包”,在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”,找到对应的 OPC UA SDK 包后点击 “安装”,将其集成到…...
STLG_01_05_程序设计C语言 - 数据类型概念解析
一、典型例题 下面这些示例,将能够更熟练地运用C语言中的数据类型,加深对数据存储和处理的理解: 示例:确定变量a、b、c和d的数据类型,并说明它们的存储大小和取值范围 short int a -1000; unsigned int b 50000; f…...
使用工厂+策略模式实现去除繁琐的if else
使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug,即在修改实体类中的类型时,或者修改属性名字,mapstruct都无法进行转换,会报错,此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...
Apache MINA 反序列化漏洞CVE-2024-52046
漏洞描述: Apache MINA 是一个功能强大、灵活且高性能的网络应用框架。它通过抽象网络层的复杂性,提供了事件驱动架构和灵活的 Filter 链机制,使得开发者可以更容易地开发各种类型的网络应用。 Apache MINA 框架的 ObjectSerializationDeco…...
SpringSpringBoot常用注解总结
Spring&SpringBoot常用注解总结 1.SpringBootApplication 这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。 SpringBootApplication public class SpringSecurityJwtGuideApplication {public static void main(java.lang.Str…...
设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析
原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…...
cnPuTTY 0.82.0.1—PuTTY Release 0.82中文版本简单说明~~
2024-11-27 官方发布PuTTY 0.82主要包含如下变化: 1.Unicode处理进行了重大重构,以允许使用系统默认配置的字符集/代码页之外的Unicode字符。仅部分实现,其他尚未完成。 2.Unicode版本进行更新:所有字符分析均已更…...
TypeScript 常用类型
文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言࿱…...
综合能源建模:理论、方法与实践
一、引言 随着全球能源需求的持续增长以及对能源安全、环境保护和可持续性发展的日益关注,综合能源系统(Integrated Energy System,IES)作为一种能够整合多种能源资源、实现能源高效利用和协同优化的解决方案,正逐渐成…...
《摄影艺术创作》慕课期末答案
《摄影艺术创作》慕课期末考试答案 题数 100 人们常说,“百闻不如一见”、“一图胜千言”,这强调的是 的表现力。 A视觉形象 B文字语言 C音响元素 D有声语言 “绘画是加法,摄影是减法”,主要是指无论摄影和绘画,都要…...
MySQL实用SQL示例
创建数据库 CREATE DATABASE zq-cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;创建表 CREATE TABLE regulatory_firm_category (category_id int NOT NULL AUTO_INCREMENT COMMENT 分类id,自增主键,parent_id int NOT NULL COMMENT 父级id,category_…...
MySQL日志
MySQL日志 文章目录 MySQL日志binlogredoundoredo vs undo binlog binlog日志也就是二进制日志,把对于数据库的写入操作以二进制的形式保存到磁盘中。binlog日志是mysql的逻辑日志,可以理解为记录的是sql日志,由mysql的服务层进行记录&#…...
双目的一些文章学习
文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识,空洞卷积,SPPNet网络,计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息,又引入3D卷积来增加模…...
国产文本编辑器EverEdit - 批量转码转换行符
1 批量转码&转换行符 1.1 应用场景 如果用户批量在Windows编辑文件,要上传到异构系统,如:Linux,则需要批量转换编码和换行符,此时可以使用EverEdit的批量转码功能。 1.2 使用方法 选择主菜单文档 -> 批量转码…...
NextCloud服务安装与配置教程
NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…...
查看 SSD能承载的每秒随机IO次数
查看 SSD能承载的每秒随机IO次数 通常给大家的一个建议就是对于数据库部署的机器,一定要采用SSD固态硬盘,而不要使用机械 硬盘,因为SSD固态硬盘最强大的地方,就是他的随机IO性能非常高。 其次,光是用SSD还不够&#x…...
C# 设计模式(结构型模式):享元模式
C# 设计模式(结构型模式):享元模式 (Flyweight Pattern) 在软件开发中,尤其是在处理大量对象时,我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时,通常会占用大量的内存资源,从而…...
使用Python,networkx构造有向图及无向图以及图合并等api
使用Python,networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…...
【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】
文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1:检测单个信号的 Stuck-at Fault示例 2:针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…...
uniapp本地加载腾讯X5浏览器内核插件
概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块,可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核,提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染? 所有plus…...
树莓派之旅-在wsl-x86-64 上进行树莓派的交叉编译
前情提要: 想把自己花里胡哨的终端丢到树莓派上去,可是树莓派算力不够,编译时间过于漫长 交叉编译 定义网上有,懒得复制了,大概就是在本机电脑上编译目标平台的可执行文件 这里的目标平台是树莓派 使用 uname -m …...
JavaScript中Map与Object的区别
在JavaScript中,Map和Object是用于存储键值对数据的两种不同的数据结构(Map是ES6新增的数据结构),它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map:Map只能通过构造函数new Map…...
基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献: 考虑使用UAV作为中继辅助节点的设备到设备(D2D)无线信息和…...
计算机网络 (20)高速以太网
一、发展背景 随着计算机技术和网络应用的不断发展,传统的以太网速率已逐渐无法满足日益增长的带宽需求。因此,高速以太网应运而生,它以提高数据传输速率为主要目标,不断推动着以太网技术的发展。 二、技术特点 高速传输ÿ…...
element ui 组件 时间选择器出现转换问题的解决办法
在使用时间选择器添加数据是会出现转换失败问题 vue中代码为: 解决办法: 在el-date-picker中添加 format 和 value-format...
当知识图谱遇上文本智能处理,会擦出怎样的火花?
目前以理解人类语言为入口的认知智能成为了人工智能发展的突破点,而知识图谱则是迈向认知智能的关键要素。达观数据在2018AIIA人工智能开发者大会承办的语言认知智能与知识图谱公开课上,三位来自企业和学术领域的专家分别从不同角度讲述的知识图谱的应用…...
SpringBootWeb案例-1
文章目录 SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理2.1 查询部门2.1.1 原型和需求2.1.2 接口文档2.1.3 思路分析2.1.4 功能开发2.1.5 功能测试 2.2 前后端联调2.3 删除部门2.3.1 需求2.3.2 接口文档2.3.3 思路…...
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分,它们会保存正则表达式匹配到的内容。在替换操作中,\1 就是对第一个捕获组内容的引用,表示你希望将捕获组中的内容放到替换文本中的某个位置。 …...
免费下载 | 2024年具身大模型关键技术与应用报告
这份报告的核心内容涉及具身智能的关键技术与应用,主要包括以下几个方面: 具身智能的定义与重要性: 具身智能是基于物理身体进行感知和行动的智能系统,通过与环境的交互获取信息、理解问题、做出决策并实现行动,产生智…...
[API测试] Karate 之独立运行方式
在 Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具) 这一篇中介绍了如何在Maven项目中,如何结合JUnit 运行 Karate的API测试, 如果是专职的QA人员来测试, 对Java语言或者Maven完全不熟悉的话要怎么来运行 Karate的测试呢? 答案就是使用Karate的独立运…...
WeNet:面向生产的流式和非流式端到端语音识别工具包
这篇文章介绍了WeNet,一个面向生产的开源端到端(E2E)语音识别工具包。WeNet的主要特点和贡献如下: 统一流式和非流式识别:提出了一种名为U2的两阶段框架,能够在单一模型中同时支持流式和非流式语音识别&…...
《我在技术交流群算命》(二):QGraphicsItem怎么写自定义信号啊(QObject多继承顺序问题)
某位群友突然无征兆的抛出以下问题: QGraphicsItem怎么写自定义信号啊 看到这个问题的时候我是比较疑惑的,按鄙人对 Qt 的了解,自定义信号只需: 继承QObject类中加入Q_OBJECT宏声明一个信号并使用 但该群友毕竟也不是一个Qt新手࿰…...
实践深度学习:构建一个简单的图像分类器
引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器,我们将以Python和TensorFlow为例,展示从数据准备到模型训练的完整流程。 环境准备 在开始之前,请确保你的环境中安装了以下工…...
实践:事件循环
实践:事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出,因为他们会立即方式堆栈的执行上下文中执行&am…...
基于Python的医院预约挂号与诊断系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
计算机网络基础
文章目录 名词含义1.应用层1.1网络应用原理1.1.1网络应用体系1.1.2进程通信1.1.3可供程序使用的运输服务1.1.4因特网的运输服务1.1.5应用层协议 1.2WEB和HTTP1.2.1HTTP概述1.2.2持续与非持续连接1.2.3报文格式 名词含义 ISP(Internet Service Provider,因特网服务提…...
Rabbitmq追问1
如果消费端代码异常,未手动确认,那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常,未手动确认(ACK)的情况下,消息的处理行为取决于消息队列的实现和配置,以下是基于 RabbitMQ …...
基于SpringBoot和OAuth2,实现通过Github授权登录应用
基于SpringBoot和OAuth2,实现通过Github授权登录应用 文章目录 基于SpringBoot和OAuth2,实现通过Github授权登录应用0. 引言1. 创建Github应用2. 创建SpringBoot测试项目2.1 初始化项目2.2 设置配置文件信息2.3 创建Controller层2.4 创建Html页面 3. 启动…...
python数据分析:使用pandas库读取和编辑Excel表
使用 Pandas,我们可以轻松地读取和写入Excel 文件,之前文章我们介绍了其他多种方法。 使用前确保已经安装pandas和 openpyxl库(默认使用该库处理Excel文件)。没有安装的可以使用pip命令安装: pip install pandas ope…...
SpringCloud源码分析-Lettue Redis
redis connection异步发送 底层是nio channel...
Linux(13)——网络概述
目录 一、TCP/IP 网络模型: 1、应用层(Application): 2、传输层(Transport): 3、互联网层(Internet or network): 4、链路层(Link࿰…...
PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)
文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定? 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…...
Qos的详细解释
QoS(Quality of Service),即服务质量,是一种用于网络管理的技术,旨在确保不同类型的数据流(如语音、视频、文件传输等)在网络中按优先级和要求得到适当的带宽、延迟、抖动和丢包率等服务&#x…...
未来20年在大语言模型相关研究方向--大语言模型的优化与改进
未来20年在大语言模型相关研究方向 模型性能优化 模型架构创新:研究新型的模型架构,如探索更高效的Transformer变体、融合递归神经网络(RNN)和卷积神经网络(CNN)的优点,以提高模型的性能、可扩展性和适应性,满足不同应用场景对模型效率和效果的要求。高效训练算法:开…...
【Vue】vue-router使用addRoute动态加载路由后刷新页面404
场景:动态加载路由,点击菜单路由跳转正常,但刷新页面报404 原因:使用404做异常路由捕获 刷新页面会导致路由丢失,重建路由时先加载了静态路由(包含异常路由捕获404),此时动态路由还未…...
《计算机组成及汇编语言原理》阅读笔记:p177-p177
《计算机组成及汇编语言原理》学习第 13 天,p177-p177 总结,总计 1 页。 一、技术总结 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
本篇博客将聚焦于通过递归来实现两种经典的枚举方法:指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用,无论是在解题中,还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…...
游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水平均识别率在89.9%
游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水识别率在92% 训练结果 数据集和标签 验证 游泳测试视频 根据测试的视频来获取检测结果: 游泳测试视频的置信度设置60% 检测结果如下&…...
coredns报错plugin/forward: no nameservers found
coredns报错plugin/forward: no nameservers found并且pod无法启动 出现该报错原因 是coredns获取不到宿主机配置的dns地址 查看宿主机是否有dns地址 resolvectl status 我这里是配置正确后,如果没配置过以下是不会显示出dns地址的 给宿主机增加静态dns地址之后将…...
【欢迎讨论方案一的可行性】SpringBoot集成netty,在handler中调用@Component注解的类
在Netty中处理请求时,调用一个由Spring Boot管理的Component注解的类 在Netty中处理请求时,调用一个由Spring Boot管理的Component注解的类,需要确保Spring上下文能够正确地注入这些组件。 方法一:使用Autowired注入Spring组件 …...