OpenHarmony网络通信-socket-io

简介

socket.io是一个在客户端和服务器之间实现低延迟、双向和基于事件的通信的库。建立在 WebSocket 协议之上,并提供额外的保证,例如回退到 HTTP 长轮询或自动重新连接。

效果展示

下载安装

ohpm install @ohos/socketio 

OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包

使用说明

  1. 导入依赖库
import { client_socket } from '@ohos/socketio';
  1. 初始化socket.io客户端
client: client_socket = new client_socket();
  1. 设置监听事件
this.client.set_open_listener(this.on_open.bind(this));
this.client.set_fail_listener(this.on_fail.bind(this));
this.client.set_reconnecting_listener(this.on_reconnecting.bind(this));
this.client.set_reconnect_listener(this.on_reconnect.bind(this));
this.client.set_close_listener(this.on_close.bind(this));
this.client.set_socket_open_listener(this.on_socket_open.bind(this));
this.client.set_socket_close_listener(this.on_socket_close.bind(this));
  1. 连接服务器
this.client.connect(uri) //uri: socket.io服务端地址
  1. 设置用户消息监听以及用户加入离开监听
  • 监听事件实现
on_user_left_listener(event_json: string): void {//回调数据处理
}
  • 设置监听
this.client.on("new message", this.on_new_message_listener.bind(this));
this.client.on("user joined", this.on_user_joined_listener.bind(this));
this.client.on("user left", this.on_user_left_listener.bind(this));
this.client.on("login", this.on_login_listener.bind(this));
  1. 登录服务器,并设置登录成功回调
this.client.emit("add user", username, this.on_emit_callback.bind(this));
  1. 发送消息并设置发送消息监听
this.client.emit("new message", message, this.on_emit_callback);
  1. 关闭服务器链接并清理监听事件
this.client.socket_close();
this.client.clear_socket_listeners();

接口说明

  • 初始化客户端
client: client_socket = new client_socket();
  • 设置客户端监听器
set_open_listener(on_open: () => void)
  • 设置客户端失败监听器
set_fail_listener(on_fail: () => void)
  • 设置客户端正在重新连接监听器
set_reconnecting_listener(on_reconnecting: () => void)
  • 设置客户端重新连接监听器
set_reconnect_listener(on_reconnect: () => void)
  • 设置客户端关闭监听器
set_close_listener(on_close: (reason: string) => void)
  • 设置socket打开监听
set_socket_open_listener(on_socket_open: (nsp: string) => void)
  • 设置socket关闭监听
set_socket_close_listener(on_socket_close: (nsp: string) => void)
  • 连接服务器
connect(uri: string)
  • 清楚所有监听器
clear_con_listeners()
  • 清楚所有socket监听器
clear_socket_listeners()
  • 设置重连次数
set_reconnect_attempts(attempts: number)
  • 设置重新连接尝试的延迟时间
set_reconnect_delay(millis: number)
  • 设置重新连接的最大延迟。
set_reconnect_delay_max(millis: number)
  • 关闭连接
close()
  • 同步关闭
sync_close()
  • 判断是否打开
opened(): boolean
  • 获取sessionID
get_sessionid(): string
  • 注册一个新的响应服务器事件的事件处理器
on(event_name: string, on_event_listener: (event_json: string) => void)
  • 设置socket监听关闭
socket_close()
  • 设置错误监听
on_error(on_error_listener: (message: string) => void)
  • 关闭错误监听
off_error()
  • 通过提供的name事件名称向socket标志发送事件
    说明: 响应服务器用来确认消息的应答
emit(name: string, message: string, on_emit_callback?: (emit_callback_json: string) => void)

源码下载

  1. 本项目依赖 socket.io-client-cpp 库,通过git submodule引入,下载代码时需加上--recursive参数。
git clone --recursive https://gitee.com/openharmony-tpc/openharmony_tpc_samples.git
  1. Linux环境无需执行该步骤,如果是windows环境下,代码下载完成后合入OHOS适配的代码,cd 进入到socketio/library/src/main/cpp/thirdModule 目录下,执行 modify.sh 脚本,将本目录下的 patch 文件合入到 socket.io-client-cpp 源码中。
  2. 开始编译项目。

约束与限制

在下述版本验证通过:

  • IDE:DevEco Studio 4.1.3.532; SDK: 4.1.0.67(SP3)。
  • IDE:DevEco Studio Next ,Developer Beta1(5.0.3.121); SDK:API12 (5.0.0.16)。

目录结构

|---- socketio  
|     |---- entry  # 示例代码文件夹
|     |---- library  # socket.io库
|           |---- ets #对外接口目录|---- client_socket.ets # 对外接口|---- cpp # 组件代码目录|---- src # 核心类目录|---- client_socket.cpp # socket.io客户端NAPI层
|     |---- README.md  # 安装使用方法                    

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址: https://download.vulnhub.com/dc/…

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化)

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化) 文章目录 一、什么是云计算?1、云计算的架构(基础设施,平台,软件)2、云计算的发展 二、如何做云计算开发?云计算的核…

量子时代加密安全与区块链应用的未来

量子时代加密安全与区块链应用的未来 现代密码学仍然是一门相对年轻的学科,但其历史却显示了一种重要的模式。大多数的发展都是基于几年甚至几十年前的研究。而这种缓慢的发展速度也是有原因的,就像药物和疫苗在进入市场之前需要经过多年的严格测试一样&…

K8s ingress-controller中nginx文件上传大小的限制

# 20、K8s ingress-controller中nginx文件上传大小的限制 问题:1.应用程序中上传文件文件出错,页面提示“您上传的文件太大了,请压缩图片后重试。” 2.通过F12 可以看到,后台提示 403错误,可以看到出错是由于nginx的限…

心学从0开始学习rust-十万个为什么篇章(持续更新篇章)

问答环节 1.const x 1;和let x 1有何区别呢,const申请的是全局变量所以会一直有效对吗? const 声明的常量具有全局作用域,但它们不能直接在函数内部声明。常量通常用于定义整个程序中使用的值,如配置常量或数学常量。 let 声明…

tcp网络编程——2

1.一个服务器只能有一个客户端连接(下面代码) ​​​​​​​tcp网络编程(基础)-CSDN博客 2.一个服务器可以有多个客户端连接(多线程) server端创建多个线程,每个线程与不同的client端建立连…

浅写个登录(无js文件)

全部代码如下&#xff0c;无需编写wxss文件&#xff0c;渲染都在style里面&#xff1a; <view style"height: 250rpx;width: 100%;"> <!-- 背景图片 --><view style"position: absolute; background-color: antiquewhite; height: 250rpx;width…

代码随想录-算法训练营day16【二叉树03:二叉树的最大深度、二叉树的最小深度、完全二叉树的节点个数】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第六章 二叉树part03今日内容&#xff1a; ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数迭代法&#xff0c;大家可以直接过&#xff0c;二刷有精力的时候 再去…

IDEA中Docker相关操作的使用教程

一、引言 Docker作为当前最流行的容器化技术&#xff0c;极大地简化了应用的部署和管理。而IntelliJ IDEA作为一款强大的集成开发环境&#xff0c;也提供了对Docker的集成支持。本文将介绍如何在IDEA中配置和使用Docker&#xff0c;包括远程访问配置、服务连接、Dockerfile编写…

【C语言】冒泡排序算法详解

目录 一、算法原理二、算法分析时间复杂度空间复杂度稳定性 三、C语言实现四、Python实现 冒泡排序&#xff08;Bubble Sort&#xff09;是一种基础的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列…

Go读取文件n行的思路之旅

【问题】最近想在一个10G的文件上读取最后100行数据&#xff0c;用了多种方式去实现&#xff0c;发现还是逆向读取比较香一点 【方法】分别尝试了两种方式&#xff1a;双端队列和逆读文件   在这里我就直接把结论放在文章前面 双端队列&#xff1a;适用于文件数据不大的情况…

微信小程序开发笔记

微信小程序开发笔记 1 微信小程序的项目结构 2 页面组成 一个微信小程序是由一个或多个页面组成的&#xff0c;这些页面被存放在pages目录中。下面以pages 目录下的index页面为例展示其组成部分&#xff0c;index页面的组成部分如下图所示。 由上图可知&#xff0c;index页面…

hbase-2.2.7分布式搭建

一、下载上传解压 1.在官网或者云镜像网站下载jar包 华为云镜像站&#xff1a;Index of apache-local/hbase/2.2.7 2.上传到linux并解压 tar -zxvf hbase-2.2.7-bin.tar.gz -C /usr/locol/soft 二、配置环境变量 1. vim /etc/profile export HBASE_HOME/usr/local/soft/h…

教授 Avi Wigderson荣获2023年图灵奖

2023年图灵奖&#xff0c;最近刚刚颁给普林斯顿数学教授 Avi Wigderson&#xff01;作为理论计算机科学领域的领军人物&#xff0c;他对于理解计算中的随机性和伪随机性的作用&#xff0c;作出了开创性贡献。 Avi Wigderson因其在计算复杂性理论、随机性与算法等领域的开创性贡…

【数据结构】二分查找

1.概念 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;它在一个有序数组中查找特定的元素。二分查找的工作原理是不断将数组分成两半&#xff0c;比较中间元素与目标值&#xff0c;根据比较结果选择左半部分或右半部分继续查找&#xff0c;直…

前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

他们这样形容我 是暴雨浇不灭的火 —— 24.4.18 学习目标 理解 HTML的概念 HTML的分类 HTML的关系 HTML的语义化 应用 HTML骨架格式 sublime基本使用 一、HTML初识 HTML指的是超文本标记语言&#xff0c;是用来描述网页的一种语言 超文本&#xff1a;暂且理解为“超级的文本”&…

【opencv】dnn示例-segmentation.cpp 通过深度学习模型对图像进行实时语义分割

模型下载地址&#xff1a; http://dl.caffe.berkeleyvision.org/ 配置文件下载&#xff1a; https://github.com/opencv/opencv_extra/tree/4.x/testdata/dnn 该段代码是一个利用深度学习进行语义分割的OpenCV应用实例。下面将详细解释代码的功能和方法。 引入库 引入了一些必要…

PyTorch转ScriptModule的问题记录

文章目录 本文记录了转ScriptModule时遇到的一系列问题如何转ScriptModule?遇到的坑Expected a value of type Tensor for argument self but instead found type Optional[Tensor].Expected integer literal for index but got a variable or non-integer. ModuleList/Sequen…

(最详细)关于List和Set的区别与应用

关于List与Set的区别 List和Set都继承自Collection接口&#xff1b; List接口的实现类有三个&#xff1a;LinkedList、ArrayList、Vector。Set接口的实现类有两个&#xff1a;HashSet(底层由HashMap实现)、LinkedHashSet。 在List中&#xff0c;List.add()是基于数组的形式来添…

内部类

一.概念 当一个事物内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么将这个内部的完整结构最好使用内部类。在Java中&#xff0c;可以将一个类定义在另一个类或者一个方法内部&#xff0c;前…