flutter笔记-webrtc使用1:依赖本地包socket.io-client

news/2024/5/19 5:53:11

文章目录

  • 1. 示例工程
  • 2. yaml 修改
  • 3. 使用
  • 4. socketio 关于自定义服务器自定义签名的问题
  • 封装成async和await方式

本文开始介绍webrtc的使用,阅读本文的前提是假设你已经使用过webrtc,了解webrtc的交互机制,不了解的可以看之前的文章: WebRTC系列-WebRTC基础(四)连接建立时序图及运行机制,本文使用的信令服务是基于socketio 2.x的版本,所以下面介绍dart中如何本地依赖socket.io-client包;
通过本文你将学会如何添加本地的dart包到自己的项目,将了解如何使用socketio;
Dart大多数情况下都是直接适用pub的方式从网站下载下来使用。如果需要将源码下载到指定的目录去使用,就需要使用yaml添加本地依赖的方式了;这里使用socket.io-client-dart本地添加的方式介绍:

1. 示例工程

示例项目的配置如下:
在这里插入图片描述
也就是如下的文件关系:

...dart
........depends
...............socket.io-client-dart

2. yaml 修改

上面介绍了工程的文件夹结构,接着就需要修改主工程的yaml文件了;修改如下:

dependencies:http: ^1.2.1socket_io_client:path: ./depends/socket.io-client-dart/

这里的socket_io_client,是依赖项目yaml配置的包名;然后就是配置库的相对路径了;
之后执行 dart pub get或flutter pub get, 命令会自行下载socket_io_client中的库依赖。

3. 使用

在主项目的文件中使用和pub的方式一直:
1.引入头文件 import 'package:socket_io_client/socket_io_client.dart' as IO;

  1. 调用示例:
void main(List<String> args) async {// 应用自定义的 HTTP Overrides// 创建 Socket.IO 客户端IO.Socket socket = IO.io('https://39.97.110.12:443', <String, dynamic>{'transports': ['websocket'], // 指定使用 WebSocket 传输});// 连接到服务器socket.connect();// 监听连接事件socket.onConnect((_) {print('Connected');socket.emit('join', '123456');});// 监听收到的消息socket.on('event', (data) => print(data));// 监听断开连接事件socket.onDisconnect((_) => print('Disconnected'));// 监听来自服务器的消息socket.on('joined', (data) {print('Joined:${data}');});socket.on('message', (data) {print('Joined${data}');});// 监听连接错误事件socket.on('error', (data) {print('Error');print(data);});socket.on("connect_error", (data) => print('Connect error: $data'));
}

上面的代码展示了socketio的简单使用;

4. socketio 关于自定义服务器自定义签名的问题

大多数我们测试的时候使用的都是自定义签名的https服务,这时候使用isocketo的client是连接不上的;需要配置如下:

class MyHttpOverrides extends HttpOverrides {HttpClient createHttpClient(SecurityContext? context) {return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) {// 接受所有证书,包括自签名证书return true;};}
}

然后在调用socketio前如下调用:

 // 应用自定义的 HTTP OverridesHttpOverrides.global = MyHttpOverrides();

注意引入sdk依赖库:import 'dart:io';

测试服务在git上:WebRTCDemo

dart测试展示:
在这里插入图片描述

封装成async和await方式

async和await 是类似java的一种同步的方式去异步低啊用方法,并等待返回的一种方式;这种方式的代码看起来会比较好;改造上面的代码如下:

Future<bool> SocketIOConnect(IO.Socket socket) {Completer<bool> completer = Completer<bool>();// 监听连接事件socket.onConnect((_) {sleep(Duration(milliseconds: 100));print('Connected sucess!!!');completer.complete(true);// socket.emit('join', '123456');});// 监听连接错误事件socket.on('connect_error', (data) {print('Connect error: $data');completer.complete(false);});// 监听连接超时事件socket.on('connect_timeout', (data) {print('Connect timeout: $data');completer.complete(false);});// 返回 Future 对象return completer.future;
}
void testSocketIo() async {// 创建 Socket.IO 客户端IO.Socket socket = IO.io('https://39.97.110.12:443', <String, dynamic>{'transports': ['websocket'], // 指定使用 WebSocket 传输});bool connected = await SocketIOConnect(socket);if (connected) {print('Socket connected');socket.emit('join', '123456');// 监听收到的消息socket.on('event', (data) => print(data));// 监听断开连接事件socket.onDisconnect((_) => print('Disconnected'));// 监听来自服务器的消息socket.on('joined', (data) {print('Joined: $data');});socket.on('message', (data) {print('Message: $data');});// 监听连接错误事件socket.on('error', (data) {print('Error');print(data);});socket.on('connect_error', (data) => print('Connect error: $data'));} else {print('Socket connection failed');}
}

http://www.mrgr.cn/p/46226180

相关文章

用友政务财务系统 FileDownload 任意文件读取漏洞复现

0x01 产品简介 用友政务财务系统具有多项核心功能,旨在满足各类组织的财务管理需求。首先,它提供了财务核算功能,能够全面管理企业的总账、固定资产、现金、应付应收等模块,实时掌握企业的财务状况,并通过科目管理、凭证处理、报表分析等功能为决策提供有力支持。 0x02 …

分布式文件系统--MinIO

1 MinIO安装(Docker) ●在root目录下新建docker_minio文件夹 ●在docker_minio文件夹下新建config文件夹,data文件夹 ●在root目录下新建docker_compose文件夹,在docker_compose文件夹中添加docker-compose.yaml services:minio:image: quay.io/minio/miniocontainer_name: mi…

【文章转载】Lance Martin的关于RAG的笔记

转载自微博黄建同学 从头开始学习 RAG&#xff0c;看Lance Martin的这篇笔记就行了&#xff0c;包含了十几篇论文和开源实现&#xff01; —— 这是一组简短的&#xff08;5-10 分钟视频&#xff09;和笔记&#xff0c;解释了我最喜欢的十几篇 RAG 论文。我自己尝试实现每个想…

【蓝桥杯省赛真题40】python摘苹果 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python摘苹果 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python摘苹果 第十三届蓝桥杯青少年组python编程省赛真题 一、题目要求 &…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块&#xff0c;最终导致数据库宕机&#xff0c;通过数据抢救&#xff0c;恢复了全部的数据。下面是详细的故障分析诊断过程&#xff0c;以及详细的解决方案描述&#xff1a; 故障现象 数据库宕机之后&#xff0c…

K8S基础概念

一、MASTER Kubernetes里的Master指的是集群控制节点&#xff0c;在每个Kubernetes集群里都需要有一个Master来负责整个集 群的管理和控制&#xff0c;基本上 Kubernetes的所有控制命令都发给它&#xff0c;它负责具体的执行过程&#xff0c;我们后 面执行的所有命 令基本都…

C# 给图片添加文字水印

目录 应用场景 开发运行环境 方法说明 方法代码 调用示例 小结 应用场景 在某些应用项目&#xff08;如电子档案信息管理&#xff09;中&#xff0c;查看电子图片信息是经常使用到的功能&#xff0c;此时我们就需要给显示在浏览器中的图片添加文字水印版权或提示信息。…

如何设置微信自动回复?教你快速上手!

自动回复对于需要在微信上洽谈业务的人来说&#xff0c;无疑是非常实用的一个功能。 下面就一起来看看微信管理系统的机器人自动回复都有哪些设置吧&#xff01; 1、自动通过好友 只要有新的好友请求发送到你的微信账号&#xff0c;系统会自动通过该请求&#xff0c;无需手动…

javaEE初阶——多线程(九)——JUC常见的类以及线程安全的集合类

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题的最后一篇文章:关于JUC常见的类以及线程安全的集合类 如果有不足的或者错误的请您指出! 目录 3.JUC(java.util.concurrent)常见的类3.1Callable接口3.2 RentrantLoc…

文件包含漏洞基础

php 中的文件包含函数&#xff1a; incude &#xff1a; require incude_once require_once 为了减少重复性代码的编写&#xff1b; 任意后缀的文件当中只要存在 php 代码就会被当作 php 执行&#xff1b; 本质&#xff1a;由于包含的文件不可控&#xff0c;导致文件包含…

huggingface模型下载至本地并调用教程

huggingface内有许多预训练模型&#xff0c;可以在线调用模型或者将模型部署至本地&#xff0c;但有时候通过网址调用模型会很慢&#xff0c;有些服务器甚至无法通过网址调用… 那么&#xff0c;正题&#xff0c;如何将huggingface的模型部署至本地呢&#xff1f;其实很简单&am…

重发布的原理及其应用

重发布的作用&#xff1a; 在一个网络中&#xff0c;若运行多种路由协议或者相同协议的不同进程&#xff1b;因为协议之间不能直接沟通计算&#xff0c;进程之间也是独立进行转发和运算的&#xff0c;所以&#xff0c;需要使用重发布来实现路由的共享。 条件 &#xff1a; 1&am…

TimThumb——超好用的 PHP 略缩图裁剪插件

TimThumb 是一个非常简洁方便的、用于裁图的 PHP 程序。只要给它设置一些参数,它就可以生成指定图片的缩略图甚至是直接给指定的网站截图。现在很多 WordPress 主题中,都使用的是 TimThumb 这个 PHP 类库进行缩略图处理。(本博客使用的 Nana 主题中的文章略缩图也是用 TimThu…

Laravel 6 - 第十四章 响应

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

接口自动化测试框架建设的经验与教训

为什么选择这个话题&#xff1f; 一是发现很多“点工”在转型迷茫期都会问一些自动化测试相关的问题&#xff0c;可以说自动化测试是“点工”升级的必经之路&#xff1b;二是Google一下接口自动化测试&#xff0c;你会发现很多自动化测试框架相关的文章&#xff0c;但是大部分…

同旺科技 USB TO SPI / I2C适配器读写24LC256--页写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版&#xff1b; 从00地址开始写入64个字节&#xff0c;然后再将64个字节读回&#xff1b; 页写时序&#xff1a; 读时序&#xff1a…

Docker(二)Docker+ server部署极简前端页面

本篇文章介绍如何使用 Dockerserver 将一个极简前端页面进行部署 1.本地运行一个简单的前端页面&#xff0c;再把它部署到服务器上 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

指令优化:基于大型语言模型的指令算子的进化多目标指令优化

指令优化:基于大型语言模型的指令算子的进化多目标指令优化 摘要 基于指令的语言建模在预训练的语言模型中受到了极大的关注。 提出了一种指令优化方法,将指令生成视为一个进化的多目标优化问题,利用大型语言模型(LLM)来模拟指令运算符,包括变异和交叉。 此外,为这些运算…

探索直播+电商系统中台架构:连接消费者与商品的智能纽带

随着直播电商的崛起&#xff0c;电商行业进入了全新的智能时代。直播形式的互动性和即时性为消费者提供了全新的购物体验&#xff0c;而电商平台则为商品的展示、销售和配送提供了强大的支持。在这一背景下&#xff0c;直播电商系统中台架构成为了连接消费者与商品的智能纽带&a…

【STM32+HAL+Proteus】系列学习教程---串口USART(DMA 方式)定长,不定长收发。

实现目标 1、利用UART实现上位机PC与下位机开发板之间的数据通信 2、学会STM32CubeMX软件关于UART的DMA模式配置 3、具体目标&#xff1a;1、实现串口定长收发数据通信&#xff1b;2、串口不定长收发数据通信。 一、DMA简介 1、什么是DMA? DMA&#xff08;Direct Memory …