Vue集成photo-sphere-viewer全景插件:打造沉浸式VR看房体验与动态场景切换

news2026/3/14 19:05:36
1. 从零开始为什么选择Vue photo-sphere-viewer如果你最近看过一些房产App或者装修网站一定会对那个可以360度无死角“逛”房子的功能印象深刻。手指一划客厅、卧室、厨房尽收眼底仿佛真的置身其中。这种沉浸式的看房体验不仅酷炫而且非常实用。作为一个在Web前端和3D可视化领域摸爬滚打了十来年的老手我负责过好几个类似的项目从最初的摸索到现在的轻车熟路我可以很负责任地告诉你用Vue配合photo-sphere-viewer这个全景插件来实现VR看房是目前技术栈里上手最快、效果最稳、定制性也相当不错的方案。你可能会问市面上不是有现成的商业解决方案或者更强大的游戏引擎吗没错Unity或者Unreal Engine确实能做出电影级的VR效果但对于大多数Web前端团队来说学习成本高、项目集成复杂、包体积巨大都是难以承受之重。而photo-sphere-viewer恰恰解决了这个痛点。它本质上是一个基于Three.js的封装库Three.js是WebGL的明星框架负责处理复杂的3D图形计算而photo-sphere-viewer则把全景图加载、渲染、交互这些脏活累活都打包好了提供了一套非常友好的JavaScript API。这意味着你不需要从零开始学习3D数学和图形学就能快速搭建出一个专业级的全景应用。那么为什么是Vue呢因为Vue的响应式数据和组件化开发模式与这种交互密集型的应用简直是天作之合。想象一下你需要管理多个房间的全景图、每个房间里的可点击热点比如一个门把手、一幅画、以及热点点击后平滑切换到另一个房间的动画。这些状态和逻辑用Vue的data、methods和computed来管理会非常清晰和高效。你可以把整个全景查看器封装成一个Vue组件房间数据、热点配置都通过props传入交互事件通过$emit抛出整个应用的架构会变得非常优雅和易于维护。我试过用原生JS和React都做过类似功能但在开发效率和代码组织上Vue给我的体验是最好的。2. 环境搭建与基础全景查看器2.1 创建Vue项目与安装依赖万事开头难但咱们这个开头一点也不难。首先确保你有一个可以运行的Vue开发环境。如果你还没有我强烈建议使用Vite来创建项目速度飞快。打开终端执行下面这行命令npm create vuelatest my-vr-tour按照提示选择你需要的配置比如TypeScript、Router等然后进入项目目录安装我们核心的依赖cd my-vr-tour npm install photo-sphere-viewer three这里解释一下photo-sphere-viewer是我们的主角而three是它的底层依赖虽然photo-sphere-viewer的包里面可能已经包含了某个版本的Three.js但显式安装可以避免潜在的版本冲突问题这是我踩过的一个小坑。安装完成后你还需要引入样式文件否则查看器看起来会有点“秃然”。2.2 第一个全景画面5分钟快速实现依赖装好我们来写点真正的代码。在Vue组件里我们通常会在template中准备一个容器div然后在script的mounted生命周期里初始化查看器。这里有个关键点必须确保DOM容器已经渲染完成所以mounted是最安全的地方。我们先创建一个最简单的组件PhotoSphereViewer.vuetemplate div refviewerContainer classviewer-container/div /template script import { Viewer } from photo-sphere-viewer; import photo-sphere-viewer/dist/photo-sphere-viewer.css; export default { name: PhotoSphereViewer, props: { // 接收父组件传过来的全景图路径 panoramaUrl: { type: String, required: true } }, data() { return { viewer: null }; }, mounted() { this.initViewer(); }, beforeUnmount() { // 组件销毁前务必销毁查看器实例释放内存和事件监听 if (this.viewer) { this.viewer.destroy(); } }, methods: { initViewer() { // 使用 this.$refs 获取DOM元素比 document.querySelector 更“Vue” this.viewer new Viewer({ container: this.$refs.viewerContainer, panorama: this.panoramaUrl, size: { width: 100%, height: 600px // 建议设置固定高度或使用vh单位确保容器有明确尺寸 }, caption: 我的第一个全景客厅, navbar: [ zoom, move, download, caption, fullscreen ], defaultZoomLvl: 50, maxFov: 100, minFov: 30 }); } } }; /script style scoped .viewer-container { width: 100%; border-radius: 8px; overflow: hidden; /* 防止查看器内容溢出 */ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); /* 加个阴影好看点 */ } /style把这段代码跑起来如果你的panoramaUrl是一张正确的2:1比例等距圆柱投影全景图也就是常见的720°全景图那么一个可以鼠标拖拽、缩放、全屏的沉浸式全景窗口就出来了navbar配置项定义了顶部工具栏的按钮我习惯放上缩放、移动、下载、标题和全屏这些对于用户探索全景图足够了。defaultZoomLvl、maxFov这些参数可以控制初始的视野范围多调调找到最适合你图片的观感。2.3 核心参数详解让你的查看器更“听话”photo-sphere-viewer的配置项非常丰富理解几个关键的你就能驾驭它90%的行为。我挑几个在VR看房场景下特别重要的说说panorama: 不只是字符串。除了传入一个图片路径它还可以是一个数组或对象用于支持立方体贴图格式。如果你的全景图是由前后左右上下六张图组成的一些专业相机导出这种格式就可以用panorama: { left: left.jpg, front: front.jpg, right: right.jpg, back: back.jpg, top: top.jpg, bottom: bottom.jpg }立方体贴图在某些情况下渲染效率更高边缘畸变更小。size: 这个我强调一下容器必须有确定的宽高。如果你像上面例子一样用width: 100%那么高度height一定要给一个确定值比如600px或70vh否则查看器可能无法正确初始化或者变成一个高度为0的“平面”。navbar: 工具栏的配置是数组除了使用字符串快捷方式如zoom还能深度自定义按钮。比如你想加一个“回到初始视角”的按钮navbar: [ zoom, move, { id: reset-view, content: ↺, title: 重置视角, className: custom-reset-btn, onClick: () { this.viewer.animate({ yaw: 0, pitch: 0, zoom: 50, speed: 5rpm }); } }, fullscreen ]这个自定义按钮的功能是点击后视图会平滑动画到初始的朝向和缩放级别。plugins: 这是实现高级功能如我们后面要做的热点标记的入口。它是一个数组每个插件以[PluginClass, pluginOptions]这样的子数组形式传入。我们现在先留空下一章会重点讲。3. 灵魂所在使用Markers插件添加可交互热点一个静态的全景图只是个“展厅”而有了可点击的热点Markers它才变成了可以“穿梭”的“房子”。Markers插件是photo-sphere-viewer官方提供的功能强大允许你在全景图的特定经纬度位置放置各种形状的标记并绑定交互事件。3.1 引入与配置Markers插件首先需要单独引入Markers插件及其样式。我们在之前的组件基础上进行升级import MarkersPlugin from photo-sphere-viewer/dist/plugins/markers; import photo-sphere-viewer/dist/plugins/markers.css;然后在查看器的配置项plugins中启用它。我们通常会把热点的定义数据放在Vue的data或props里这样方便动态更新。假设我们有一个房间里面有两个门热点分别通向厨房和卧室script // ... 之前的导入 ... export default { data() { return { viewer: null, // 热点配置数据 markersData: [ { id: to-kitchen, tooltip: 进入厨房 , // 鼠标悬停提示 // 定义热点形状为圆形 circle: 20, // 定义热点样式 svgStyle: { fill: rgba(255, 105, 97, 0.4), // 半透明橙色填充 stroke: #ff6961, // 边框色 strokeWidth: 3px, cursor: pointer // 鼠标手型 }, // 核心热点在全景球面上的位置经度(longitude)和纬度(latitude)单位是弧度 longitude: 0.8, latitude: 0.1, // 锚点决定热点的哪个点对准坐标。center center是中心对准。 anchor: center center }, { id: to-bedroom, tooltip: 进入卧室 ️, // 也可以使用HTML内容作为热点更灵活 html: div classcustom-marker/div, longitude: -1.2, latitude: -0.2, anchor: center center, // 可以自定义数据方便在事件回调中识别 room: master_bedroom } ] }; }, mounted() { this.initViewer(); }, methods: { initViewer() { this.viewer new Viewer({ container: this.$refs.viewerContainer, panorama: this.panoramaUrl, size: { width: 100%, height: 600px }, plugins: [ // 启用Markers插件并传入初始热点配置 [MarkersPlugin, { markers: this.markersData }] ] // ... 其他配置 }); // 获取插件实例用于后续的事件监听和动态操作 const markersPlugin this.viewer.getPlugin(MarkersPlugin); // 监听热点点击事件这是实现房间切换的关键 markersPlugin.on(select-marker, (event, marker) { console.log(你点击了热点:, marker.id); // 这里将来会触发房间切换动画 this.$emit(marker-selected, marker); // 通知父组件 }); } } }; /script style scoped /* 为自定义HTML热点添加样式 */ .custom-marker { font-size: 24px; filter: drop-shadow(0 0 4px white); /* 加个白色阴影更醒目 */ transition: transform 0.2s; } .custom-marker:hover { transform: scale(1.2); } /style现在运行代码你应该能在全景图上看到两个醒目的热点了。鼠标放上去有提示点击会在控制台输出日志。longitude经度和latitude纬度是定位的关键你可以把它想象成地球仪上的经度和纬度决定了热点在球面上的具体位置。调整这两个值可以让热点精确地“贴”在门把手、画框或者任何你想让用户点击的地方。3.2 动态管理热点显示、隐藏与更新在真实的看房应用中热点不总是一成不变的。比如用户从客厅进入卧室后客厅的热点应该隐藏卧室里出现通往卫生间和阳台的新热点。这就需要我们能动态地操作Markers插件。通过前面获取到的markersPlugin实例我们可以调用一系列方法addMarker(markerConfig)/addMarkers(markerConfigArray): 动态添加一个或多个热点。removeMarker(markerId)/clearMarkers(): 移除指定ID的热点或清空所有热点。updateMarker(options): 更新已有热点的属性比如位置、样式、工具提示等。showMarker(markerId)/hideMarker(markerId): 显示或隐藏特定热点。假设我们在父组件中管理着所有房间的状态当切换房间时可以调用子组件的方法来更新热点// 在 PhotoSphereViewer.vue 组件中 methods: { // ... 其他方法 ... updateRoomMarkers(newMarkers) { const markersPlugin this.viewer.getPlugin(MarkersPlugin); // 先清空旧热点 markersPlugin.clearMarkers(); // 添加新房间的热点 if (newMarkers newMarkers.length 0) { markersPlugin.addMarkers(newMarkers); } } }然后在父组件中当房间变化时// 父组件 onRoomChange(newRoomId) { // 1. 获取新房间对应的全景图URL和热点配置 const newPanorama this.getPanoramaUrl(newRoomId); const newMarkers this.getMarkersConfig(newRoomId); // 2. 调用子组件方法更新全景图和热点 this.$refs.photoSphereViewer.switchToNewRoom(newPanorama, newMarkers); }这样我们就实现了热点与房间状态的联动。关键在于所有的状态变化都应该由Vue的响应式数据或组件通信来驱动而不是直接去操作DOM或插件实例。这保持了Vue架构的清晰。4. 实现动态场景切换丝滑的房间穿梭体验这是整个VR看房功能最出彩、也最考验细节的地方。我们不能简单粗暴地直接替换全景图那样会非常生硬。理想的效果是用户点击一个热点比如一扇门视角先平滑地动画移动到门的位置并适当推进模拟“走向门”然后无缝地切换到新的房间全景图同时视角拉回一个舒适的广角。photo-sphere-viewer的API为我们提供了完美的工具链来实现这个流程。4.1 拆解切换动画一个三步走的策略我经过多次实践总结出一个流畅的切换三部曲第一步聚焦动画。当热点被点击时调用查看器的animate方法将视角yaw,pitch动画移动到该热点的位置marker.config.longitude/latitude并可能增加一点zoom减小FOV制造一个“走近看”的效果。第二步切换全景图。在第一步动画的then()回调中调用查看器的setPanorama()方法传入新房间的图片URL。这个方法会返回一个Promise确保图片加载完成。第三步复位与更新。在新图片加载完成后再次调用animate将视角调整到新房间的默认观察点比如房间中央并恢复到一个舒适的缩放级别。同时更新Markers插件中的热点为新房间的配置。4.2 代码实战封装一个完美的切换函数让我们在之前的PhotoSphereViewer组件里添加一个处理热点点击并执行切换的方法。我们假设父组件通过props传递了一个rooms对象里面包含了所有房间的数据。script // ... 导入 ... export default { props: { currentRoomId: String, rooms: Object // 结构{ roomId: { panorama: ‘url’, markers: [...] } } }, data() { return { viewer: null, markersPlugin: null }; }, watch: { // 监听房间ID变化如果是通过其他方式如楼层图切换房间也触发切换 currentRoomId(newVal, oldVal) { if (newVal ! oldVal) { this.switchRoom(newVal); } } }, mounted() { this.initViewer(); }, methods: { initViewer() { this.viewer new Viewer({ // ... 初始配置使用当前房间的图片 ... panorama: this.rooms[this.currentRoomId].panorama, plugins: [ [MarkersPlugin, { markers: this.rooms[this.currentRoomId].markers || [] }] ] }); this.markersPlugin this.viewer.getPlugin(MarkersPlugin); // 监听热点点击事件 this.markersPlugin.on(select-marker, this.handleMarkerClick); }, async handleMarkerClick(event, marker) { // 假设我们在热点配置的data属性里存了目标房间ID const targetRoomId marker.config.data?.targetRoomId; if (!targetRoomId || !this.rooms[targetRoomId]) { console.warn(未找到目标房间配置或热点未设置targetRoomId); return; } // 第一步动画聚焦到热点 await this.viewer.animate({ longitude: marker.config.longitude, latitude: marker.config.latitude, zoom: 80, // 推进镜头看得更近 speed: 8rpm, // 动画速度‘rpm’是弧度每分值越大越快 }); // 第二步切换全景图 await this.viewer.setPanorama(this.rooms[targetRoomId].panorama, { transition: true, // 启用过渡效果会有淡入淡出 transitionDuration: 1000 // 过渡动画持续1秒 }); // 第三步更新热点为新房间的配置 this.markersPlugin.clearMarkers(); if (this.rooms[targetRoomId].markers) { this.markersPlugin.addMarkers(this.rooms[targetRoomId].markers); } // 第四步动画复位到新房间的默认视角 await this.viewer.animate({ zoom: 50, // 恢复到默认缩放 speed: 5rpm }); // 通知父组件房间已切换 this.$emit(room-changed, targetRoomId); }, // 供父组件调用的方法 switchRoom(roomId) { if (!this.viewer || !this.rooms[roomId]) return; // 直接切换不执行聚焦动画例如从楼层图点选 this.viewer.setPanorama(this.rooms[roomId].panorama, { transition: true, transitionDuration: 1000 }) .then(() { this.markersPlugin.clearMarkers(); if (this.rooms[roomId].markers) { this.markersPlugin.addMarkers(this.rooms[roomId].markers); } this.$emit(room-changed, roomId); }); } } }; /script这段代码是核心中的核心。async/await语法让异步动画的链式调用变得非常清晰就像写同步代码一样。setPanorama的transition选项至关重要它避免了图片切换时的瞬间闪烁提供了一个淡入淡出的视觉效果体验提升巨大。4.3 性能优化与体验打磨做到上面那一步功能已经完整了。但要达到商业应用级别的流畅还有几点需要优化图片预加载当用户在客厅浏览时可以悄悄在后台加载厨房和卧室的全景图。photo-sphere-viewer本身不提供这个但我们可以用Image对象手动预加载。preloadRoomImages(roomIds) { roomIds.forEach(id { const img new Image(); img.src this.rooms[id].panorama; }); }在应用初始化或用户鼠标悬停在热点上时触发预加载。加载状态提示切换房间尤其是大图加载需要时间。一定要给用户一个反馈比如在setPanorama前后显示一个加载动画或进度条。可以监听查看器的load-progress和load事件。热点防抖快速连续点击热点可能会导致动画队列混乱。可以在handleMarkerClick函数开头加一个锁。if (this.isSwitchingRoom) return; this.isSwitchingRoom true; // ... 执行切换动画 ... finally { this.isSwitchingRoom false; }视角记忆进阶更贴心的体验是当用户从卧室返回客厅时视角能恢复到离开时的位置。这需要你在离开一个房间时保存当前的yaw,pitch,zoom到状态管理如Vuex或Pinia并在返回时应用这些值。5. 超越基础高级功能与最佳实践把核心流程跑通后我们可以玩点更花的让看房体验更上一层楼。5.1 集成陀螺仪与VR模式如果你的应用主要面向移动端或者有VR设备启用陀螺仪和立体视图会非常酷。photo-sphere-viewer有对应的插件import GyroscopePlugin from photo-sphere-viewer/dist/plugins/gyroscope; import StereoPlugin from photo-sphere-viewer/dist/plugins/stereo; // 在查看器配置中 plugins: [ [MarkersPlugin, { ... }], [GyroscopePlugin, { // 陀螺仪插件 touchmove: true, // 允许触摸移动 }], [StereoPlugin] // 立体视图插件用于VR分屏 ]然后你可以在导航栏添加一个按钮来切换这些模式navbar: [ zoom, move, gyroscope, // 陀螺仪开关按钮 stereo, // VR立体模式开关按钮 fullscreen ]5.2 自定义信息面板与热点样式默认的热点样式可能不符合你的UI设计。除了用svgStyle或html自定义单个热点你还可以通过CSS全局覆盖插件的样式类比如.psv-marker、.psv-tooltip等来统一修改所有热点的外观。更进一步你可以利用tooltip的内容支持HTML的特性做出丰富的交互提示。或者完全不用tooltip在点击热点时在查看器旁边或上方渲染一个Vue组件作为信息面板显示房间介绍、面积、家具详情等。5.3 状态管理与架构建议对于复杂的多房间VR应用我强烈建议使用Pinia或Vuex进行状态管理。将当前房间ID、所有房间数据、用户视角历史等状态集中管理。这样任何组件全景查看器、2D楼层图、侧边栏信息面板都能轻松同步和响应状态变化。把PhotoSphereViewer组件设计成纯粹的“渲染器”和“交互处理器”。它接收currentRoomId和rooms作为props负责渲染和切换。当用户点击热点时它只$emit一个room-changed事件。由父组件或状态管理仓库来接收这个事件并更新currentRoomId。状态变化后通过props自动流向全景组件触发更新。这种单向数据流让逻辑非常清晰也易于调试。5.4 常见坑与避雷指南最后分享几个我踩过的坑帮你节省时间图片尺寸与格式全景图最好是2:1比例的等距圆柱投影图。图片尺寸不宜过大建议长边不超过8000像素否则移动端加载和GPU渲染压力大。推荐使用WebP格式在保持画质的前提下大幅压缩体积。CORS问题如果你的图片放在另一个域名下可能会遇到跨域问题导致图片加载失败或标记插件无法正常工作。确保图片服务器设置了正确的CORS头Access-Control-Allow-Origin: *。内存泄漏在Vue组件的beforeUnmount生命周期中一定要调用viewer.destroy()。它会清理Three.js的渲染器、场景、事件监听器防止页面切换后内存占用不释放。热点坐标校准确定热点的longitude和latitude是个手工活。可以先用navbar: [coordinates]在工具栏显示当前视角的坐标然后拖动到目标点记下坐标值再填入热点配置。也可以写一个调试模式点击全景图就在点击处添加一个临时热点方便采集坐标。移动端适配在移动设备上触摸交互和性能是关键。确保查看器容器有合适的视口高度可以用100vh但要小心移动浏览器地址栏的坑并测试touchmove等手势是否流畅。可以考虑在低端设备上降低默认渲染分辨率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…