怎么创造自己的网站手机wap网站大全

news/2025/10/5 4:04:52/文章来源:
怎么创造自己的网站,手机wap网站大全,crm客户管理系统软件,免费流程图网站前言 在现代的移动应用程序中#xff0c;长连接是一种不可或缺的能力#xff0c;包括但不限于推送、实时通信、信令控制等常见场景。在猫耳FM的直播业务中#xff0c;我们同样使用了 WebSocket 长连接作为我们实时通信的基础。 在我们推进用户体验优化的工作中#xff0c;…前言 在现代的移动应用程序中长连接是一种不可或缺的能力包括但不限于推送、实时通信、信令控制等常见场景。在猫耳FM的直播业务中我们同样使用了 WebSocket 长连接作为我们实时通信的基础。 在我们推进用户体验优化的工作中其中用户成功进入直播间的时间是我们优化的一个重点指标其包含了房间信息接口的调用、长连接的建立、播放器拉流的首帧等。本文主要介绍我们在 WebSocket 长连接跨端统一和体验优化的思路和方案。 这里我们先简单介绍下 WebSocket以及为什么我们选择了 WebSocket 而不是其他的协议作为我们持续迭代的方向。 WebSocket 是一种在 Web 应用程序和服务器之间建立持久、双向通信连接的通信协议。它允许客户端和服务器之间进行实时数据传输而无需客户端不断地发起 HTTP 请求为开发者提供了丰富的实时应用开发可能性。从最早猫耳 2016 年开始调研和迭代直播的业务WebSocket 已经是一种相当成熟的方案可以同时在 Web 和移动应用程序中使用。早在 2011 年 12 月 WebSocket 的协议标准被定稿 [RFC 6455]https://datatracker.ietf.org/doc/html/rfc6455从 2012 年开始 WebSocket 逐渐被各大浏览器支持包括当时的 Internet Explorer、Safari、Mozilla Firefox 和 Google Chrome 等。同时作为更早期诞生的 Socket.IO 为了兼容更早期的浏览器在我们的场景下很多做法于这个时间点上就显得相当臃肿和没必要了。当时使用 WebSocket 的一个重点考虑我们还是可以同时在 Web 上直接使用如果我们在客户端上引入其他的协议在迭代过程中我们就不得不考虑同时兼容和支持多个实时通信的通道为了降低最初直播方案的复杂性我们选择使用了 WebSocket 协议作为我们直播业务实时通信、信令传递的基础协议。 时间来到 2023 年前后随着互联网技术的发展我们当前又有了更多的选择作为实时消息传递的基础消息通道类似 MQTT、gRPC 等上层协议其实都可以作为一个可靠的传递消息的方式并且被大量的用户所验证。同时在 Web 技术上也有类似 SSE、WebRTC、WebTransport 等方案可以作为我们上层消息传输的机制。作为一个普遍的考虑这里我们的选择一定是一种“高级”协议如果直接使用 TCP、UDP 等传输层协议不可避免的我们要考虑更复杂的消息拆分、可靠性保证和安全等问题这里我们秉持着多端统一、提高研发效率、减少维护成本的考虑我们最后的选择尽可能还是一种相对成熟和可靠的方案在这样的前提下MQTT、gRPC 由于在 Web 上支持不佳或是本身就通过 WebSocket 包装的我们就暂时不做深入讨论。同时一些较新的 Web 方案对比之下类似 SSE 是单向传输、WebRTC 更适合实时音视频通信的场景且不太能被 CDN 加速支持、WebTransport 太过于新Safari 到现在为止还不支持同时在消息顺序上需要外部进行额外保证这样看下来 WebSocket 仍是我们当前最好的选择。 技术方案 在考虑优化之前由于我们之前在 Android 和 iOS 客户端上也是使用的是 WebSocket (wss://)首先需要明确的就是当前有什么问题。 根据我们的埋点的数据在我们直连国内 BGP 线路服务器建连的情况下完成 WebSocket 握手的时长90 分位下文同为 500ms ~ 600msDNS TCP TLS HTTP Upgrade相比于我们一次正常的 https 请求取得响应的时间明显慢了很多这个也是我们优化的一个最终目标由于 WebSocket 在 HTTP/1.1 上不可避免的需要重新建立 HTTP 连接并进行一次 Upgrade目前可以做的优化相对有限可能在 DNS 和 TLS 过程中可以有一些优化。其实我们早期还尝试通过订阅、取消订阅指令来直接复用同一个连接但后来为了方便做负载均衡以及高可用性等原因线上已经不再支持这块逻辑。 要做好这次优化我们这边有几点考虑 统一多端代码在日志中能输出有效和明确的错误信息 支持自定义 DNS 过程包括 httpdns、DNS 缓存的策略和 ipv6 的策略等 支持 http proxy方便测试调试 后续迭代方便可以持续跟进支持 WebSocket 协议标准 在考虑多端统一并且成熟可靠的选择不多我们主要对比下我们使用过的一些可以跨端的方案这里主要提使用过的原因是我们能大致理解其核心的逻辑并作出一定的修改 [websocketpp]https://github.com/zaphoyd/websocketpp一个支持 client/server 的库我们主要用于 PC 上建立 server 和 Web 进行本地交互 [libwebsockets]https://github.com/warmcat/libwebsockets在用户连麦等场景中曾作为和服务端的进行信令传递的方案 [cronet]https://chromium.googlesource.com/chromium/src//HEAD/components/cronet/来自 Chromium 的网络栈基本上可以认为是 Google Chrome 浏览器中负责网络通信部分的上层封装 这里特别提到 cronet 的原因是它虽然不直接支持 WebSocket但是其代码库完整包含了 WebSocket 协议的实现同时也是目前我们在客户端上已经使用中的网络库的底层实现 由于 websocketpp 已经很久没更新了我们这里主要对比下我们目前 libwebsockets 和 cronet 实现的方案要考虑的一些问题 主要代码语言DNS系统 Wi-Fi http proxy 设置接入成本持续迭代libwebsocketsC目前仅支持简单的策略需要修改代码进行完整的 DNS 逻辑控制外部控制设置Android 上需要单独实现 JNI 层支持 Java/Kotlin 中调用。同时自定义 DNS 过程都在持续迭代中支持较新的标准cronetC / iOS Objective-C / Android Java JNI已修改并在线上稳定运行 支持国内的各种商用 httpdns 服务、海外 Google DoH 等内部集成支持需要实现 cronet 适配层代码代码生成相关接入层代码 通过简单的对比其实我们更倾向使用 cronet 作为持续后续迭代的方案不仅更适合我们在移动端中集成且有足够的经验来优化它。同时在 Android 上我们将逻辑的代码合入 native 层中还能进一步优化网络 IO、TLS 等关键性能。 这里特别要提到我们之前使用的 cronet 方案是来自B站移动端基础架构优化过的修改版本在一些特定的场景给予了我们业务更高的自由度比如请求优先级等。常见的在 iOS 上原生支持自定义 DNS 过程其实都是一个比较取巧的方案特别是在处理 https 请求的一些过程上我们是用了 cronet 之后才考虑 iOS 上也支持这块。由于这里我们是使用的修改版 cronet 方案这些问题已经都被优化的足够好了我们仅需要考虑如何启用其中 WebSocket 的部分并提供给客户端使用。另外需要考虑的一点是 Android 上的 cronet 实际上它的 Java 层的初始化的配置和 native 层中使用的 Cronet C API 接口实际上不能直接兼容这块其实是在更早猫耳 Android 落地播放器使用 cronet 的作为 http 传输方案的时候已经得到了解决并用于实验不同协议的播放效果参见 [猫耳 Android 播放框架开发实践]而我们 iOS 和 PC 上直接使用的就是 Cronet C API 的包装这样保证了多端全局的配置、埋点信息都是一致的且最大化了网络的性能和端上可观测的能力。 确定了方向我们其实要做的事情也很简单因为在 Chromium 中 WebSocket 在某种程度上也是基于 http 已有过程的一种延伸之前很多已有的优化方案可以直接对 WebSocket 生效包括自定义 DNS 过程等。 这里我们仅将 net/websockets 中相关逻辑对客户端进行了适配 支持主动发送 ping 包。Web 标准中的 WebSocket 实现实际上没有 ping 的动作只能被动响应服务端的 ping 包 移除 Origin 的请求头和相关校验。Web 标准中的 WebSocket 相对于普通的 http 请求有一些源站策略的差别这里我们在客户端和 native 中实际上使用不到 增加 cronet 适配层代码这里简单贴下 native 接口 idlAndroid 中 jni 的适配也是依样画葫芦 // Counterpart of UrlRequestCallback for websocket. [Abstract] interface WebSocketCallback {/*** The message type invoked by {code OnMessage()}.* 目前只能收到 text 或者 binary 两种. continuation 已被合并处理.*/enum MESSAGE_TYPE {CONTINUATION 0,TEXT 1,BINARY 2,};OnAddChannelResponse(WebSocket request, UrlResponseInfo info, string extensions);OnMessage(WebSocket request, MESSAGE_TYPE type, Buffer buffer);OnDropChannel(WebSocket request, bool was_clean, uint16 code, string reason);OnFailed(WebSocket request, Error error);OnCanceled(WebSocket request); };/*** Controls an Websocket request.* Initialized by InitWithParams().* Note: All methods must be called on the Executor passed to InitWithParams().*/ interface WebSocket {// see https://www.iana.org/assignments/websocket/websocket.xhtml#opcode.enum OPCODE {CONTINUATION_FRAME 0,TEXT_FRAME 1,BINARY_FRAME 2,CONNECTION_CLOSE_FRAME 8,PING_FRAME 9,PONG_FRAME 10,};[Sync]InitWithParams(Engine engine,string url,WebSocketParams params,WebSocketCallback callback,Executor executor) (RESULT result);[Sync]Start() (RESULT result);[Sync]ReadFrames() (RESULT result);[Sync]SendFrame(bool fin, OPCODE op_code, Buffer buffer) (RESULT result);[Sync]Send(OPCODE op_code, Buffer buffer) (RESULT result);[Sync]Close(uint16 code, string reason) (RESULT result);Cancel();[Sync]IsDone() (bool done); };// 请求参数. struct WebSocketParams {/*** Array of HTTP headers for this request.*/arrayHttpHeader request_headers; }; 其中大部分的通用的参数都可以复用已有的 CronetURLRequest 的部分。 整体的架构和调用时机大致是这样的关系图中有标星的位置是我们这次进行新加或调整的地方 调用时机 同时我们对 WebSocket 的消息在内部进行了处理由于协议支持消息是分片传输为了简化业务上消息处理的过程将消息做了合并最终一起回调给上层业务处理。 最后在端上再进行一次封装已有的重试、心跳等机制这里就不进行讨论了我们将端上业务中的和 native 代码中 libwebsockets 的 WebSocket 都换成了 cronet 的实现最终上线后收获了非常可观的收益 在建连速度方面Android 优化了 ~150msiOS 优化了 ~250ms其中我们 Android 端上早在之前就已经落地通过 httpdns 的方式包括 DNS 的缓存策略的优化等优化 okhttp 建连的过程iOS 之前的 WebSocket 实现 [SocketRocket]https://github.com/facebookincubator/SocketRocket 依赖系统的 DNS建连时长相比于 Android 会慢 50ms现在也和普通 HTTP 请求统一了 DNS 的策略收益会更明显点符合我们的预期最终也是补完了我们端上业务中最后一块不支持自定义 DNS 过程的缺口。在失败率方面也和之前基本上一致且上报上来的错误信息更具有可读性后续进行分析和监控都将更加清晰。下图展示了不同版本间客户端 WebSocket 连接失败的错误信息这里我们从 6.1.0 版本开始切换到 cronet 的实现可以看到新版本的信息更加直观和明确极大地方便了研发人员定位具体问题。 随着 WebSocket 的实现切换为 cronet在我们客户端本身的网络诊断中也可以更加完整和准确反馈实际的 DNS 结果、错误信息和网络质量等信息。 未来展望 前阵子 Node.js 22 的发布其原生支持的 WebSocket 客户端也旨在提供一个更加标准化的接口和使用的方式说明了当前 WebSocket 仍能作为一种足够优秀的方案被广大开发者所认可。 值得一提的是随着互联网技术的发展WebSocket 也不是一成不变WebSocket over HTTP/2 [RFC 8441]https://www.rfc-editor.org/rfc/rfc8441和 WebSocket over HTTP/3 [RFC 9220]https://www.rfc-editor.org/rfc/rfc9220.html 也被相继定稿其中 WebSocket over HTTP/2 也开始逐渐被各大浏览器、网关、开源库支持相对于 HTTP/1.1 中的 Upgrade 机制在 HTTP/2 和 HTTP/3 中 WebSocket 的握手有了相当程度的简化换句话说就是可以更快。目前由于支持 WebSocket over HTTP/2 的服务端组件还不够广泛暂时没有在用户侧进行验证不过我们接入的 cronet 版本已经支持仅需要先有一次 HTTP/2 的连接确认服务端支持后就可以正常启用在我们的测试环境中也可以观测到更好的效果。除此之外由于我们使用的修改后的 cronet 也支持配置下发域名通配符等方式强制使用 QUIC 通过 UDP 进行传输而无需与普通 TCP 的 HTTP 请求进行竞速目前仅用于在播放和下载场景中做一些实验后续也有望在 WebSocket over HTTP/3 的演进中得到更可观收益。 -End- 作者丨腾袭、三七、nazimai、叔于田、阿司、浩哥

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

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

相关文章

传统企业如果建立网站福建省网站备案

介绍 方法的多态 多态是在继承,重载,重写的基础上实现的 我们可以看看这个代码 package b;public class main_ {public static void main(String[] args) { // graduate granew graduate(); // gra.cry();//这个时候,子类的cry方法就重写…

建设网站平台的用语wordpress网站静态页面生成

目录 登录AP产品 Console登录(只可以现场登录) Web/Telnet/SSH登录(可以现场、远程登录) 配置AP的管理地址 通过Web界面远程登录 通过Telnet、SSH等命令行的方式登录 登录AC产品 Console登录(只可以现场登录&a…

Python 在科学计算与工程模拟中的应用

一、引言 🔬 科学计算与工程模拟是现代科研和工程设计中不可或缺的环节。从流体力学到材料科学,从结构分析到天体物理学,科学家和工程师依赖计算机进行建模、仿真与分析。在众多编程语言中,Python 以其简洁的语法…

Python 在大数据与分布式计算中的应用

一、引言 📊 随着互联网、物联网和移动应用的普及,全球数据量呈指数级增长。据统计,每天产生的数据量已达数十亿 GB。如何高效存储、处理和分析这些海量数据,成为企业和科研机构的核心挑战。大数据与分布式计算技…

地图网站制作百度淘宝网

本文实例为大家分享了C实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下刚学完了C语言,便尝试的写了贪吃蛇的代码,但是效果不佳,很多的bug,所以,这个学了C,便重新的写了这个小游戏…

Python 在教育与科研中的应用与价值

一、引言 🎓 随着信息技术的发展,教育与科研的方式正在发生深刻变化。传统的教育模式和科研方法逐渐与数字化、智能化结合,呈现出新的发展趋势。在这一过程中,Python 作为一种简洁、功能强大、生态丰富的编程语言…

深圳网站建设一尘互联苏州建设交通官方网站

一、第一题:壁画 解题思路:前缀和贪心枚举 仔细思考可以发现B值最大的情况是一段连续的长度为n/2上取整的序列的累加和 【Python程序代码】 import math T int(input()) for _ in range(1,1T):n int(input())s input()l math.ceil(len(s)/…

Python 在自动化测试与质量保障中的应用

一、引言 🧪 随着软件系统的规模日益庞大、复杂度不断提升,人工测试已经无法满足快速迭代和持续交付的需求。自动化测试成为保障软件质量、提高交付效率的关键手段。在自动化测试领域,Python 以其简洁的语法、丰富…

电子网站游戏网址试玩郴州新网最新招聘信息

题目描述 小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。输入描…

商城网站开发价整站优化推广品牌

简介: 本文由好未来资深数据平台工程师毛祥溢分享,主要介绍批流融合在教育行业的实践。内容包括两部分,第一部分是好未来在做实时平台中的几点思考,第二部分主要分享教育行业中特有数据分析场景。 1.背景介绍 好未来介绍 好未来是…

wordpress更改中文版后还是英文徐州百度seo排名

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

网站建设xml下载域名网站注册认证

中断 打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。 在确定时间内对相应事件作出响应,如:温度监控(定时器中断)。故障处理,检测到故障&#x…

如何建立自已的购物网站深圳网站开发团队

在云计算时代大环境的影响,各大企业也都企图将云计算融入企业业务中,智能化不只可以提高企业产能、提高服务效率,更能发掘更高的品牌价值。云计算不断深入企业内部,尤其在劳动密集型的产业中,优势更加明显。以电销为例…

1万网站建设费入什么科目个人网站html源码

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

域名注册好了如何做网站it公司排名

Java中常用的类,包,接口包名说明java.lang该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。java.util该包提供了包含集合框架、遗留的集合类、事件模型、…

城市绿化建设英文网站深圳航空公司官方网站

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 查询工序所在的几何组TAG UF_OPER_ask_geom_group 效果: 代码: void MyClass::do_it() { int count=0;tag_t * objects;UF_UI_ONT_ask_selected_nodes(&count, &objects);for (in…

php在网站开发中的应用高端网站建设熊掌号

图像是获取信息以及探知世界的重要媒介。近年来,传感科技与成像技术实现了跨越式发展,促使图像获取在质与量上均获得了显著提升。在多样化成像手段中,光谱成像技术是成像科技的重要组成部分,是人类借助光这一能量手段探测物质特性…

网站建设及维护费算业务宣传费企业融资方式有哪几种

回顾小夕在文章《逻辑回归》中详细讲解了逻辑回归模型,又在《Sigmoid与Softmax》中详细讲解了Sigmoid的实际意义(代表二类分类问题中,其中一个类别的后验概率)。至此,我们已经比较透彻的理解了逻辑回归模型假设函数(也…

wordpress.org 插件廊坊seo技巧

写简历的基本目的和策略 大部分情况下,写简历是找工作的第一步,考虑到第二步就是面试,那么简历就是敲门砖,为了让企业认识到你的价值,必须把自己的真实水平描述出来,展现出你有能力应对这份工作。甚至要体现…

信宜做网站设置seo主要做什么工作

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在在JavaScript中location常用属性和方法以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可…