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

文章目录

  • 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.mzph.cn/web/4547.shtml

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

相关文章

springboot实现同时批量新增和批量修改数据

在springboot项目中&#xff0c;实现同时将一批数据进行新增和修改 有时候我们会遇到&#xff0c;用户在前端界面提交一批数据&#xff0c;而这一批数据中&#xff0c;可能有新增的数据也可能存在修改的数据&#xff0c;为了方便同时执行新增和修改的方法&#xff0c;需要调用…

Python轻量级Web框架Flask(12)—— Flask类视图实现前后端分离

0、前言&#xff1a; 在学习类视图之前要了解前后端分离的概念&#xff0c;相对于之前的模板&#xff0c;前后端分离的模板会去除views文件&#xff0c;添加两个新python文件apis和urls&#xff0c;其中apis是用于传输数据和解析数据 的&#xff0c;urls是用于写模板路径的。 …

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一、什么是数据库&#xff1f; 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁…

【UE C++】设置游戏模式

问题 我们都知道如何使用蓝图创建一个游戏模式并且在这个游戏模式蓝图中去设置“默认pawn类”、“HUD类”、“玩家控制器类”、“游戏状态类”、“玩家状态类”、“旁观者类”。那么如何使用C完成该操作呢&#xff1f; 步骤 1. 首先创建“GameMode”、“GameState”、“HUD”…

Arthas:阿里出品,线上问题快速搞定!

前面我们通过JVM线程分析及内存分析来让大家从服务器资源异常情况下排查代码问题&#xff0c;类似这种的解决方式&#xff0c;更多的是在服务器资源占用已经异常显现&#xff0c;我们就可以按照这种方式去排查和解决。 但实际工作中&#xff0c;可能会出现&#xff1a;接口的TP…

惯导中基本的目标参数及其过程量

目标参数过程量(过程噪声&#xff09;目标参数物理含义常用单位过程量物理含义过程量物理对象单位功率谱密度单位(psd)rand walk error过程量目标参数/tunitpsd(unit)^2/hzsqrt(psd)常用单位单位换算速度(m/s)加速度m/s^2m^2/s^3m/s/sqrt(s)m/s/sqrt(hr)ug/sqrt(HZ)角度(rad)角…

boost::asio::io_context, boost::asio::steady_timer

asio::io_context是Asio库中的一个I/O执行环境&#xff0c;而asio::steady_timer是一个与asio::io_context关联的定时器&#xff0c;可以用来在给定的时间点执行一个函数或者是在一个固定的时间间隔后执行一个函数。 以下是一个创建asio::steady_timer的例子 #include <ios…

Paddle OCR v4 微调训练文字识别SVTRNet模型实践

文字识别步骤参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据…

自动化机器学习:让机器学习更智能

自动化机器学习&#xff1a;让机器学习更智能 在当今数据驱动的时代&#xff0c;机器学习技术已经成为了许多行业和领域的核心。然而&#xff0c;随着数据量的增加和模型复杂度的提升&#xff0c;传统的机器学习方法往往需要大量的人力和时间进行调参和优化&#xff0c;这在某…

3步教你成为微信客户管理高手,助你事半功倍!

在如今的商业世界中&#xff0c;与客户建立良好的关系并提供个性化的服务已成为企业成功的关键。今天就 分享三个简单的步骤&#xff0c;让大家成为微信客户管理的高手&#xff0c;事半功倍&#xff01; 第一步&#xff1a;客户分类与精细化服务 为了更好地管理客户&#xff…

ROS2 ZEDX UBUNTU 环境配置

一、环境要求 硬件&#xff1a;镭神域控 ZED X双目摄像机 ros2-foxy zed sdk 4.0.8 cuda 11.4 二、CUDAZED SDK安装 安装显卡驱动以及CUDA 11.1 参考之前博文&#xff1a; https://blog.csdn.net/qq_41950533/article/details/135673420?csdn_share_tail%7B%22type%22%3A%2…

mongodb使用debezium

前置 服务器上需要安装jdk11 jdk下载地址 kafka安装 官网下载地址 安装教程 debezium 安装 运行 Debezium 连接器需要 Java 11 或更高版本 Debezium 并不是一个独立的软件&#xff0c;而是很多个 Kafka 连接器的总称。这些 Kafka 连接器分别对应不同的数据库&#xff0c;…

【C++】C\C++内存管理

下面是围绕C\C内存管理这一块知识谈论相关的内存管理机制&#xff0c;有需要借鉴即可。 同时&#xff0c;我在下面也放了快速建立链表的模板&#xff0c;方便oj题目拿到vs上进行调试。 内存管理目录 1.CPP内存管理1.1new、delete关键字概念1.2特性1.3总结 2.new、delete的底层…

电商API数据采集接口||大数据的发展,带动电子商务产业链,促进了社会的进步

最近几年计算机技术在诸多领域得到了有效的应用&#xff0c;同时在多方面深刻影响着我国经济水平的发展。除此之外&#xff0c;人民群众的日常生活水平也受大数据技术的影响。 主流电商API数据采集接口||在这其中电子商务领域也在大数据技术的支持下&#xff0c;得到了明显的进…

《逃离塔科夫》PVE模式加入付费特别版引发玩家不满

《逃离塔科夫》PVE模式加入付费特别版引发玩家不满 近期&#xff0c;《逃离塔科夫》开发者Battlestate发布了多个新版本&#xff0c;但其中PVE模式只能在价格最高的“Unheard Edition”中购买&#xff0c;导致玩家不满。据悉&#xff0c;“Unheard Edition”售价高达250欧元&a…

Liunx进程与端口

目录 查看进程 进程状态 &#xff08;了解&#xff09; TTY &#xff08;拓展&#xff09; 查看进程PID 1. pgrep 2. pidof 动态查看查看进程 top与htop的操作&#xff1a; 计算cpu负载&#xff1a; 进程控制 kill与pkill 查看端口 1. netstat 2. ss 3. lsof 查看…

Linxu系统服务管理,systemd知识/进程优先级/平均负载/php进程CPU100%怎么解决系列知识!

shell脚本&#xff08;命令&#xff09;放后台 sleep 300& 放到后台运行&#xff0c;脚本或命令要全路径 nohup&#xff1a;用户推出系统进程继续工作 【功能说明】 nohup 命令可以将程序以忽略挂起信号的方式运行起来&#xff0c;被运行程序的输出信息将不会显示到终端 如…

小程序的合同是怎么样写的

​很多商家找第三方做小程序都遭遇到了各种问题&#xff0c;如访问速度慢、服务器关闭、反复收费等。如果当初商家找的是正规的第三方服务商&#xff0c;双方签订了明确的合同条款&#xff0c;出现任何问题后&#xff0c;相信都能够进行解决。下面将具体介绍合同内容&#xff0…

数据结构之顺序表的基本操作

搭配食用更佳哦~~ 数据结构之顺顺顺——顺序表-CSDN博客 1.定义一个动态顺序表 创建一个头文件 SeqList.h&#xff0c;进行准备工作 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include&q…

大田场景下的路径检测论文汇总

文章目录 2020Visual Servoing-based Navigation for Monitoring Row-Crop Fields 2020 Visual Servoing-based Navigation for Monitoring Row-Crop Fields code: https://github.com/PRBonn/visual-crop-row-navigation 摘要&#xff1a; 自主导航是野外机器人执行精确农业…