You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Server端socket丢失从自定义命名空间初始化的Client端socket存储的数据(typescript,socketio)

Server端,使用socket.io的命名空间机制,将Client端连接的namespace和socket id建立对应关系,并在Server端存储一个namespace对应的socket id列表,在Client端将需要保留的数据存入localStorage,当Client断开连接后,在Server端利用之前建立的namespace和socket id对应关系,在socket disconnect事件中获取对应的localStorage数据,并在Server端的namespace数据中重新存储。示例如下:

Server端代码:

// 在namespace中的连接和socket id建立对应关系
const socketIdByNamespace = {};
const io = require('socket.io')(server);
const nsp = io.of('/my-namespace');
nsp.on('connection', (socket) => {
  const socketId = socket.id;
  const namespace = socket.nsp.name;
  if (!socketIdByNamespace[namespace]) {
    socketIdByNamespace[namespace] = [];
  }
  socketIdByNamespace[namespace].push(socketId);
  // 在Server端获取Client端存储的localStorage数据
  socket.on('data', (data) => {
    const localStorageData = localStorage.getItem('my-data');
    if (localStorageData) {
      // 存储Client端的数据
      // 以namespace为key,{socket id: data}为value
      const namespaceData = {};
      JSON.parse(localStorageData).forEach((data) => {
        if (data.namespace === namespace) {
          namespaceData[data.socketId] = data.data;
        }
      });
      socket.emit('data', namespaceData);
    }
  });
  // 在socket disconnect事件中重新存储Client端的数据
  socket.on('disconnect', (reason) => {
    const socketIdIndex = socketIdByNamespace[namespace].indexOf(socketId);
    if (socketIdIndex !== -1) {
      socketIdByNamespace[namespace].splice(socketIdIndex, 1);
    }
    const localStorageData = localStorage.getItem('my-data');
    if (localStorageData) {
      const data = JSON.parse(localStorageData)
                      .filter((d) => d.namespace === namespace);
      if (data.length > 0) {
        const namespaceData = {};
        data.forEach((d) => {
          const idIndex = socketIdByNamespace[namespace].indexOf(d.socketId);
          if (idIndex !== -1) {
            namespaceData[d.socketId] = d.data;
          }
        });
        localStorage.setItem('my-data', JSON.stringify(data.concat({
          namespace,
          data: namespaceData,
          timestamp: new Date().getTime(),
        })));
      }
    } else {
      localStorage.setItem('my-data', JSON.stringify([{
        namespace,
        data: {},
        timestamp: new Date().getTime(),
      }]));
    }
  });
});

Client端代码:

// 在Client端存储需要保留的数据到localStorage
const socket = io('/my-namespace');
socket.on('connect', () => {
  const data = { ... };
  const localStorageData = JSON.parse(localStorage.getItem('my-data')) 
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

「跨越障碍,迈向新的征程」盘点一下2022年度我们开发团队对于云原生的技术体系的变革|社区征文

否则数据卷的恢复能力,完全不能用啊!每次我们都需要考虑自己去实现备份。 - **「准入Webhook(v1.19版本开始)」** 将自定义策略或验证与 Kubernetes 集成的主要方式。 从 v1.19 开始,Admission Webhook 可以返回警... 并允许用户以可移植的方式在任何 Kubernetes 环境和支持的存储提供程序上合并快照操作。6. **【容器能力扩展】在v1.20版本开始它移除 dockershim** ,从而就实现了可以扩展为其他容器实现的急促> tips:维护dock...

2022技术盘点之平台云原生架构演进之道|社区征文

数据库有MongoDB分片集群/MySQL/Redis/ElasticSearch/RabbitMQ进行各类业务数据计算和存储## 三 流量管控![](https://kaliarch-bucket-1251990360.cos.ap-beijing.myqcloud.com/blog_img/20221214175313.png)... 服务通过Kubernetes API-Server获取后端一组Service Pod真实IP,业务POD通过Calico网络进行POD与POD直接流量通讯。## 四 安全管控### 4.1 SmartOps安全全景![](https://kaliarch-bucket-1251990360.cos.ap-be...

Apache Pulsar 在火山引擎 EMR 的集成与场景

对于用户构建端到端的数据链路起着重要的支撑作用。火山引擎 EMR 基于火山引擎的 IaaS 能力,提供底层基础的大数据体系的计算引擎和存储引擎,并向上对接数据开发治理工具 DataLeap。 如果用一句话来定义火山引... 火山引擎 EMR 通过存算分离把集群内部的数据外置到云存储中,如火山引擎对象存储 TOS,不再依赖用户集群内部的 HDFS。此外,通过外置 Hive Metastore、Public History Server、作业管理、配置中心等产品和技术方案,进...

计算引擎在K8S上的实践|社区征文

因此数据平台也面临着从Hadoop到云原生的探索。我们做了一些尝试:首先是存储,使用OSS等对象存储替代了HDFS。其次就是计算,也是本篇文章将要介绍的,将Spark计算任务从Yarn迁移至K8S上运行。# 最初的尝试spark-thrift-server考虑到我们服务的客户数据量都不是很大,并且在数据相关的场景中都是基于SQL来实现。上半年我们在离线业务中首先选择了spark-thrift-server。spark-thrift-server的本质其实就是一个Spark Application,和...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Server端socket丢失从自定义命名空间初始化的Client端socket存储的数据(typescript,socketio)-优选内容

「跨越障碍,迈向新的征程」盘点一下2022年度我们开发团队对于云原生的技术体系的变革|社区征文
否则数据卷的恢复能力,完全不能用啊!每次我们都需要考虑自己去实现备份。 - **「准入Webhook(v1.19版本开始)」** 将自定义策略或验证与 Kubernetes 集成的主要方式。 从 v1.19 开始,Admission Webhook 可以返回警... 并允许用户以可移植的方式在任何 Kubernetes 环境和支持的存储提供程序上合并快照操作。6. **【容器能力扩展】在v1.20版本开始它移除 dockershim** ,从而就实现了可以扩展为其他容器实现的急促> tips:维护dock...
2022技术盘点之平台云原生架构演进之道|社区征文
数据库有MongoDB分片集群/MySQL/Redis/ElasticSearch/RabbitMQ进行各类业务数据计算和存储## 三 流量管控![](https://kaliarch-bucket-1251990360.cos.ap-beijing.myqcloud.com/blog_img/20221214175313.png)... 服务通过Kubernetes API-Server获取后端一组Service Pod真实IP,业务POD通过Calico网络进行POD与POD直接流量通讯。## 四 安全管控### 4.1 SmartOps安全全景![](https://kaliarch-bucket-1251990360.cos.ap-be...
Apache Pulsar 在火山引擎 EMR 的集成与场景
对于用户构建端到端的数据链路起着重要的支撑作用。火山引擎 EMR 基于火山引擎的 IaaS 能力,提供底层基础的大数据体系的计算引擎和存储引擎,并向上对接数据开发治理工具 DataLeap。 如果用一句话来定义火山引... 火山引擎 EMR 通过存算分离把集群内部的数据外置到云存储中,如火山引擎对象存储 TOS,不再依赖用户集群内部的 HDFS。此外,通过外置 Hive Metastore、Public History Server、作业管理、配置中心等产品和技术方案,进...
计算引擎在K8S上的实践|社区征文
因此数据平台也面临着从Hadoop到云原生的探索。我们做了一些尝试:首先是存储,使用OSS等对象存储替代了HDFS。其次就是计算,也是本篇文章将要介绍的,将Spark计算任务从Yarn迁移至K8S上运行。# 最初的尝试spark-thrift-server考虑到我们服务的客户数据量都不是很大,并且在数据相关的场景中都是基于SQL来实现。上半年我们在离线业务中首先选择了spark-thrift-server。spark-thrift-server的本质其实就是一个Spark Application,和...

Server端socket丢失从自定义命名空间初始化的Client端socket存储的数据(typescript,socketio)-相关内容

火山引擎大规模机器学习平台架构设计与应用实践

可以看到不同应用场景下的参数和数据集、模型训练过程中的网络通信带宽、训练资源数和时长都不尽相同。所以面对丰富的机器学习应用,我们的需求是多样的。针对这些需求,底层的计算、存储、网络等基础设施要提供强大... Server 和 Scheduler 角色的实例。在调度时,它需要 Gang 调度的能力,所有实例(或其中某一种角色的实例)要么都起来,要么都不起来。同时在训练过程中还需要网络的亲和性。例如同一个分布式训练的容器,申请到的资源能...

字节跳动宣布开源 KubeWharf,一个实践驱动的云原生项目集

在分析了 etcd 的性能瓶颈和 Kubernetes 对于状态信息存储的需求之后,字节跳动基础架构团队自研了 KubeBrain,代替 etcd 作为 Kubernetes 的元数据存储系统,旨在提高 Kube-APIServer 存储的读写性能,增强集群稳定性... kube-apiserver 组件是 Kubernetes 集群的所有外部请求访问入口,以及 Kubernetes 集群内部所有组件的协作枢纽。在使用 Nginx 做 API Server 四层负载均衡器时,由于 client 和 API Server 通过 HTTP2 连接,容易造...

干货|湖仓一体架构在火山引擎LAS的探索与实践

是面向湖仓一体架构的 Serverless 数据处理分析服务,提供字节跳动最佳实践的一站式 EB 级海量数据存储计算和交互分析能力,兼容 Spark、Presto、Flink 生态,帮助企业轻松构建智能实时湖仓。 LAS服务是什么?... 从而快速定位当前记录是否已经存在,来判断这一条记录是做Update还是做Insert操作,从而可以快速地将这种小规模的数据去添加到Append Log。在读取时,通过Compaction就可以将LogFile和BaseFile里边的数据进行Merge去重...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

观点|SparkSQL在企业级数仓建设的优势

数据仓库的事实标准和数据处理工具,Hive已经不单单是一个技术组件,而是一种设计理念。Hive有JDBC客户端,支持标准JDBC接口访问的HiveServer2服务器,管理元数据服务的Hive Metastore,以及任务以MapReduce分布式... 数仓架构通常是一个企业数据分析的起点,在数仓之下会再有一层数据湖,用来做异构数据的存储以及数据的冷备份。但是也有很多企业,特别是几乎完全以结构化数据为主的企业在实施上会把数据湖和企业数仓库合并,基于某个...

从混合部署到融合调度:字节跳动容器调度技术演进之路

因此字节跳动基础架构编排调度团队需要对数据中心整体的机器资源利用率负责,实现降本提效。我们的策略体现在由 Partition 向 Share 的演进过程,具体思路是:由最初 Kubernetes 和 YARN 分别管理各自的机器,演进... 下图详细展示了一个 Client 访问一个 Cache 缓存的完整链路分解,该链路涉及了 Client 端的用户态代码到 Client 端的协议栈、到网卡、到交换机、到 Server 端的协议栈交换机、再到用户态的处理,最后以相同的路径返回...

CloudWeGo 易用性建设:提升 Go 语言云原生工程效率之路

另外还支持了自定义 binder 和 Validator,方便用户使用其熟悉的语法。另外,我们将所有的配置统一收敛到一个结构体,使用 withOption 的形式注入到 Hertz engine 上。**03** **生态建设... Client 生成的目的主要是可以屏蔽掉初始化 Hertz client 、发送请求等一系列固定的操作、为用户提供一个类似 HTTP 请求一键发送的能力,并能够和 hz 生成的 server 直接进行通信。 **CWGO**cwgo 是我们...

一文了解字节跳动消息队列演进之路

数据的负载均衡(Balance)是一个重要而复杂的问题。首先,需要考虑多种因素,包括存储空间、写入吞吐量以及消费吞吐量等。此外,热点问题也是一个值得注意的问题,因为每个 Partition 的负载可能并不一致,有一些 IO 开销... 例如上图中的 Partition 3 中,Leader 所在的 Broker 挂掉之后,Controller 便会把 Leader 角色切换到 Broker B 接管流量以保障服务的正常运行。需要注意的是,这种情况下是否会丢失数据,取决于用户写入参数和集群的配...

借助 MAD 助力你的 Android 应用开发|社区征文

比如空安全以及数据的不可变性。### Null SafetyKotlin 的空安全特性让很多运行时 NPE 提前到编译期暴露和发现,有效降低线上崩溃的发生。我们在代码中重视对 Nullable 类型的判断和处理,我们在数据结构定义时都... it.setCustomAnimations(R.anim.slide_in, R.anim.slide_out) }.commit()}```当我们创建并启动一个 Fragment 时,可以基于作用域函数完成各种初始化工作,就像上面例子那样。这个例子同时也提醒我们...

字节跳动Dev Better技术沙龙来啦!参与活动赢好礼,限时免费报名中!

6月25日,字节跳动Client Infra&开发者服务团队✖️华泰证券前端技术团队邀您参加 **字节跳动Dev Better系列技术沙龙活动** —— **《Web研发效能及新技术实践》** !与用户需求紧密关联、充满激情与活力的前端领域发展迅猛,不断涌现出新的技术,为了助力前端开发者的成长、为所有前端爱好者提供交流的机会,本次活动邀请到了来自 **字节跳动、华泰证券和行云集团** 的四位优秀讲师,为大家带来 **Serverless实践、Modern.js工程方...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询