做网站 挣广告联盟的佣金做金属的网站

pingmian/2025/10/8 12:24:02/文章来源:
做网站 挣广告联盟的佣金,做金属的网站,动漫网站开发研究内容,网站建设费一般多少随着Web应用程序的发展#xff0c;越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同#xff0c;Websocket允许服务器自主地向客户端发送…随着Web应用程序的发展越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同Websocket允许服务器自主地向客户端发送数据。这种实时连接的能力使得Websocket在许多应用场景中得到了广泛的应用。 Websocket技术的优点之一是减少了网络延迟。在传统的HTTP请求-响应模型中客户端必须不断地向服务器发送请求以获取更新的数据。这种不断的请求-响应循环会占用大量的带宽和处理能力。而Websocket的持久连接可以在服务器有新数据时立即向客户端发送从而减少了网络延迟和服务器负载。 另一个优点是Websocket可以处理大量的并发连接。在传统的HTTP请求-响应模型中每个请求都必须在服务器上进行处理这可能会对服务器造成负载压力。但是Websocket的持久连接可以在服务器上保持打开状态从而减少了与每个连接相关的开销。这使得服务器可以处理大量的并发连接而不会降低性能。 Websocket还可以用于实时通信。例如聊天应用程序可以使用Websocket来实现实时消息传递。在这种情况下Websocket的持久连接可以在服务器上保持打开状态以便客户端可以接收实时消息。这种实时通信的能力使得Websocket在许多应用程序中得到了广泛的应用。 总之Websocket技术在现代Web应用程序中发挥着越来越重要的作用。它可以减少网络延迟和服务器负载处理大量的并发连接并提供实时通信能力。因此如果您正在构建一个需要实时更新的Web应用程序那么Websocket技术可能是您的理想选择。 封装类实现 import { WebSocketConfigOption } from ./WebSocketConfigOption;export class ReconnectableWebSocket {private ws!: WebSocket; // ws实例private opt: WebSocketConfigOption; // ws配置项private lockReconnect: boolean false; // 避免ws重复连接private isClosingWindow: boolean false;private reconnectTimeout: any;private heartSendInterval: any;constructor(option: WebSocketConfigOption) {if (null option.url || option.url) {throw (url不能为空);}this.opt option;this.initWebSocket();}private initWebSocket() {if (null this.opt.secWebSocketProtocol) {this.ws new WebSocket(this.opt.url);} else if (this.opt.secWebSocketProtocol.length 0) {this.ws new WebSocket(this.opt.url);} else {this.ws new WebSocket(this.opt.url, this.opt.secWebSocketProtocol);}this.initEventHandle();window.onbeforeunload () {this.isClosingWindow true;this.ws.close(); // 当窗口关闭时主动去关闭websocket连接。}}private initEventHandle() {this.ws.onclose () {console.log(ws连接关闭! this.opt.url);this.opt.onclose this.opt.onclose();this.heartCheckStop();if (!this.isClosingWindow) {this.reconnect();}}this.ws.onerror () {console.log(ws连接错误! this.opt.url);this.opt.onerror this.opt.onerror();this.heartCheckStop();if (!this.isClosingWindow) {this.reconnect();}}this.ws.onopen () {console.log(ws连接成功! this.opt.url);this.opt.onopen this.opt.onopen();this.heartCheckStart();}this.ws.onmessage (event: any) {this.opt.onmessage this.opt.onmessage(event);}}/** 重连 */private reconnect() {if (this.lockReconnect) {return;}this.lockReconnect true;this.reconnectTimeout setTimeout(() {this.initWebSocket();this.lockReconnect false;}, 2000);}/** 关闭重连 */private reconnectStop(): void {clearTimeout(this.reconnectTimeout);}/** 开启心跳包保持连接 */private heartCheckStart(): void {this.ws.send(heartCheck);this.heartSendInterval setInterval(() {this.ws.send(heartCheck);}, 5 * 60 * 1000);}/** 关闭心跳包 */private heartCheckStop(): void {clearInterval(this.heartSendInterval);}/** 主动关闭连接 */public close(): void {this.reconnectStop();this.heartCheckStop();this.isClosingWindow true;this.ws.close();}} 配置类实现 export type WebSocketConfigOption {url: string;secWebSocketProtocol?: Arraystring;onopen?: () void;onmessage?: (msg: any) void;onerror?: () void;onclose?: () void;} 应用示例 import { WebSocketConfigOption } from ../websocket/WebSocketConfigOption; import { ReconnectableWebSocket } from ../websocket/ReconnectableWebSocket; import { InnerMqService } from ../../rx/inner-mq.service;export class MapMessageConnection {private ws!: ReconnectableWebSocket;constructor(private path: string,private innerMqService: InnerMqService,) {this.connection();}/** 连接 */private connection(): void {let wsConfig: WebSocketConfigOption {url: this.path,onopen: () {},onerror: () {},onmessage: (msg: any) {if (msg.data msg.data ! ) {let data JSON.parse(msg.data);this.innerMqService.pub(data.title, data.content);}}}this.ws new ReconnectableWebSocket(wsConfig);}/** 断开连接 */public disConnection(): void {this.ws.close();}}import { InnerMqClient } from ../../rx/inner-mq.service; import { SubmitService } from ../../service/submit.service; import { MapBase } from ../../map/map-base; import { CommonUtil } from ../../util/common-util; import { MapPage } from ../../view/page/map/map.page; import { MapDraw } from ../../map/draw/map-draw; import { MapWrap } from ../../map/draw/map-wrap; import { GeoUtil } from ../../map/geo-util; import { Point } from ../../map/entity/Point;export class MapMessageProcessor {constructor(private mqClient: InnerMqClient,private submitService: SubmitService,private mapBase: MapBase,private mapPage: MapPage,) {/** 放大 */mqClient.sub(ZoomIn).subscribe((res) {mapBase.zoomIn();});/** 缩小 */mqClient.sub(ZoomOut).subscribe((res) {mapBase.zoomOut();});/** 拖动 */mqClient.sub(Pan).subscribe((res) {mapBase.pan();});/** 显示网格 */mqClient.sub(GridSwitch).subscribe((res) {let update;if (mapBase.getGridVisible()) {mapBase.closeGrid();update false;} else {mapBase.showGrid();update true;}let config mapBase.getMapConfig();if (config) {config.grid update;CommonUtil.setConfigCache(config);mapBase.setMapConfig(config);}});/** 切换图层源 */mqClient.sub(SwitchResource).subscribe((res) {// 切换图层debuggerlet lastType mapBase.getCurrentCoordinateType();mapBase.switchMapResource(res);let currentType mapBase.getCurrentCoordinateType();// 保存设置let config mapBase.getMapConfig();if (config) {config.layer res;CommonUtil.setConfigCache(config);mapBase.setMapConfig(config);}// 检查坐标类型if (lastType ! currentType) {if (lastType wgs84 currentType gcj02) {mapBase.turnMapFeaturesFromWgs84ToGcj02();} else if (lastType gcj02 currentType wgs84) {mapBase.turnMapFeaturesFromGcj02ToWgs84();}}// 回调setTimeout(() {mapPage.updateShowInfo();});});/** 绘制类型切换 - */mqClient.sub(SwitchDrawType).subscribe((res) {mapBase.setDrawType(res);});/** 绘制 - */mqClient.sub(OpenDraw).subscribe((res) {mapBase.pan();mapBase.removeDrawedFeatures();mapBase.openDraw({drawEnd: () {setTimeout(() {mapBase.removeDrawInteraction();})},modifyEnd: () {}});});/** 绘制指定多边形并定位 - */mqClient.sub(DrawPolygonAndPositioning).subscribe((res) {mapBase.pan();mapBase.removeDrawedFeatures();let blocks JSON.parse(res);for (let i 0; i blocks.length; i) {let points: ArrayPoint [];for (let j 0; j blocks[i].length; j) {let point new Point(blocks[i][j].lng, blocks[i][j].lat);if (mapBase.getCurrentCoordinateType() wgs84) {points.push(GeoUtil.gcj02_To_wgs84(point));} else {points.push(point);}}let feature MapDraw.createPolygonFeature(points);MapWrap.addFeature(mapBase, mapBase.drawLayerName, feature);}mapBase.setFitviewFromDrawLayer();});/** fitview - */mqClient.sub(Fitview).subscribe((res) {mapBase.setFitviewFromDrawLayer();});/** 删除绘制 - */mqClient.sub(RemoveDrawedShape).subscribe((res) {mapBase.removeDrawedFeatures();});/** 提交区块下载 - */mqClient.sub(SubmitBlockDownload).subscribe((res) {let data {tileName: this.mapBase?.getCurrentXyzName(),mapType: CommonUtil.getMapType(this.mapBase?.getCurrentXyzName()),tileUrl: this.mapBase?.getCurrentXyzUrlResources(),points: this.mapBase?.getDrawedPoints(),};this.submitService.blockDownload(data).then((r) {});});/** 提交世界下载 - */mqClient.sub(SubmitWorldDownload).subscribe((res) {let data {tileName: this.mapBase?.getCurrentXyzName(),mapType: CommonUtil.getMapType(this.mapBase?.getCurrentXyzName()),tileUrl: this.mapBase?.getCurrentXyzUrlResources()};this.submitService.worldDownload(data).then((r) {});});}}如果对您有帮助 感谢支持技术分享请点赞支持 技术合作交流qq:2401315930

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

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

相关文章

售后服务方案 网站建设电子请帖免费制作app

全志A20平板,摸索了一下fastboot,但是烧录失败,提示找不到分区。于是就想到用TF卡烧录boot.img,因为只修改了内核,不想打包全部烧录一遍。 启动到uboot命令行,输入mmcinfo初始化mmc,不过提示&am…

网站建设客户评价响应式布局有几种方法

企微云CRM操作指南 – 道一云|企微https://wbg.do1.com.cn/xueyuan/2568.html 销售云 - 美洽 - 连接客户,亲密无间https://meiqia.com/sales-cloud 转载于:https://www.cnblogs.com/rgqancy/p/10695466.html

网站怎么发布信息怎么弄免费的空间做网站

系统是由相互作用和相互依赖的若干部分,按一定规律结合成的、具有特定功能的有机整体。系统有下述特性: (1)集合性。系统是由许多元素有机地组成的整体。每个元素服从整体,追求全局最优。 (2)相…

班级网站建设php上海市企业服务云网站

一、Hive 小文件概述 在Hive中,所谓的小文件是指文件大小远小于HDFS块大小的文件,通常小于128 MB,甚至更少。这些小文件可能是Hive表的一部分,每个小文件都包含一个或几个表的记录,它们以文本格式存储。 Hive通常用于…

红酒营销 网站建设宝安网站建设哪家便宜

ORDER BY FIELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过 「ORDER BY FIELD(str,str1,…)」 自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示: ORDER BY FIELD(str,str1,…) …

长春seo技术长沙网站优化诊断

查看datasheet和确认GPIO复用引脚scheme 通过查看mt7628 datasheet可以明确复用关系: 在这里我以I2S对应的GPIO引脚为例。 查看 mt7628an.dtsi 文件中对gpio的注册 $(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。 在$(TOPDIR)/target/linux/ramips/dts/mt7628an.d…

门户网站建设方法无极网站建设定制

使用pyzbar模块来识别二维码和条形码。ZBar是一个开源软件,用来从图像中读取条形码,支持多种编码,比如EAN-13/UPC-A、UPC-E、EAN-8、代码128、代码39、交错2/5以及二维码。 pyzbar是python封装ZBar的模块,我们用它来做条形码和二维码的识别。…

网站建设和维护面试题销售管理系统包括哪几大模块

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术。那么什么是分布式协调技术?那么…

做网站开发想转行做医药销售手机版网站开发

事务隔离级别.NET Core中的IDbConnection接口提供了BeginTransaction方法作为执行事务,BeginTransaction方法提供了两个重载,一个不需要参数BeginTransaction()默认事务隔离级别为RepeatableRead;另一个BeginTransaction(IsolationLevel il)可以根据业务…

公司网站备案需要什么加强品牌建设

目录 什么是拉链表 为什么要做拉链表? 没使用拉链表: 使用了拉链表: 题中订单拉链表的形成过程 实现语句 什么是拉链表 拉链表是缓慢渐变维的一种解决方案. 拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始…

百度信息流平台郑州seo公司

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存1)模型训练2)模型保存 4. 模型生成1)模型导入及调用2)相关代码(1)布局文件(2&#xff…

梅州公司做网站建设网站的协议范本

文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统,专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致&#xff0…

东莞建站公司快荐全网天下特别好网站开发项目标书

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪。 其中模型的组成主要是: 1. an attention model 主要用来从输入图像中提取 patch; 2. RNN 用来预测 attention 参数,即&am…

网站网址模板360免费建站李梦

在使用Mac电脑时,为了安全很多用户通常都会设置管理员密码。不过如果不小心忘记Mac管理员密码怎么办?幸运的是,有些方法可以重置Mac密码并重新获得访问权限。下面小编就教给大家几种重置用户密码的方法。未开启FileVault的用户方法一&#xf…

淘客做自己的网站c2c电商平台有哪些家

文章目录 前言一、概述二、系列文章全目录三、实验环境总结前言 通过本次 Java EE 三大框架(Spring、Spring MVC、MyBatis)原理、技术和方法的整合,大量的项目实践实际动手能力,解决总结在 SSM 项目中存在的问题,为毕业设计以及后期从事 Java 相关开发工作打下坚实的基础。…

包装回收网站建设网站 演示代码

ES & Kibana windows 安装 声明: 本文没有实际操作过,只记录。具体操作请参考 ES & Kibana 安装 该文章 JDK1.8,最低要求!ElasticSearch客户端,界面工具! Java开发,ElasticSearch的版…

做犯法任务的网站西安东郊做网站

目录 Disruptor简介 Disruptor的设计方案 RingBuffer数据结构 一个生产者单线程写数据的流程 多个生产者写数据的流程 消费者读数据 多个生产者写数据 Disruptor核心概念 Disruptor的使用 单生产者单消费者模式 单生产者多消费者模式 多生产者多消费者模式 消费者…

网站建设功能列表ps怎么做网站

目录 51.银行系中有很多恒星,H 君晚上无聊,便爬上房顶数星星,H 君将整个银河系看做一个平面,左上角为原点(坐标为(1, 1))。现在有 n 颗星星,他给每颗星星都标上坐标&…

入侵网站做排名辽宁咨发建设监理预算咨询有限公司网站

在图像分类任务中,卷积神经网络(CNN)相比于前馈神经网络(Feedforward Neural Network)具有以下优势: 局部感知能力:CNN通过使用卷积层和池化层来捕捉图像中的局部特征。卷积操作可以有效地共享参…

响应式网站建设精英北京市建筑工程设计有限责任公司

Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库 文章目录 Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库一、前言二、编译环境三、示例C/CPP程序1、总体工程结构2、示例代码3、CMakeLists.txt(重要)4、…