Flutter开发进阶之使用Socket实现主机服务(二)

Flutter开发进阶之使用Socket实现主机服务(二)

Flutter开发进阶之使用Socket实现主机服务(一)
在完成局域网内设备定位后就可以进入微服务的实操了。
在这里插入图片描述

I、构建Socket连接池

一、定义Socket

使用socket_io_client

socket_io_client: ^2.0.3+1

导入头文件

import 'package:socket_io_client/socket_io_client.dart' as io;

定义属性

class _SocketIoObject {/// 连接io.Socket? socket; /// 连接次数int count = 0; /// 创建的时间int createTime = 0; /// 根据连接频率获取的优先级double proportion = 0; 
}

二、定义连接池

class SocketIoPool {/// 连接池本身static Map<String, dynamic> sockets = {}; /// 连接最大数量static int maxCount = 10; /// 根据优先级获取到/// 最应该销毁的连接的keystatic String exitKey = ""; 
}

三、连接池运行逻辑

连接排序

/// 将连接按照优先级排序
/// 使用频率越低的连接的优先级越高
/// 可以被销毁
/// 
static void _sortSocket() {int now = DateTime.now().millisecondsSinceEpoch;double maxProportion = 0;sockets.forEach((key, value) {value.proportion = (now - value.createTime) / value.count;if (value.proportion > maxProportion) {maxProportion = value.proportion;exitKey = key;}});}

连接创建

/// 创建新连接时限制最大连接数量
/// 
static io.Socket _newSocket(String host, int port) {if (sockets.length >= maxCount && exitKey.isNotEmpty) {_SocketIoObject? object = sockets[exitKey];if (object != null) {object.socket?.disconnect();object.socket?.dispose();sockets.remove(exitKey);}}String relative = "$host:$port";io.Socket socket = io.io(relative);sockets[relative] = _SocketIoObject()..socket = socket..count = 1..createTime = DateTime.now().millisecondsSinceEpoch;Future(() => _sortSocket());

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

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

相关文章

Flink:使用 Faker 和 DataGen 生成测试数据

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

深入理解Sora技术原理

OpenAI 发布的视频生成模型 Sora(https://openai.com/sora)&#xff0c;能根据文本生成长达一分钟的高质量视频&#xff0c;理论上支持任意分辨率&#xff0c;如 1920x1080 、1080x1920 &#xff0c;生成能力远超此前只能生成 25 帧 576x1024 图像的顶尖视频生成模型 Stable Vi…

2078: [蓝桥杯2023初赛] 01 串的熵

对于一个长度为 n 的 01 串 S x1x2x3...xn. 香农信息熵的定义为&#xff1a; 。 其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。 比如&#xff0c;对于S 100 来说&#xff0c;信息熵 H(S ) - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) 1.3083。 对于一个…

Harbor镜像仓库的安装和使用

1 Harbor安装 参考文章&#xff1a; 银河麒麟v10离线安装harbor 由于配置了本地私有yum源&#xff0c;因此&#xff0c;直接使用yum命令安装docker和docker-compose 1.1 安装docker yum install docker-ce1.2 安装docker-compose yum install docker-compose1.3 安装harbo…

JAVA学习-NIO.Channel(通道)

在Java NIO中&#xff0c;Channel&#xff08;通道&#xff09;是用于在文件、套接字、管道等之间进行数据传输的对象&#xff0c;它类似于传统IO中的流。通道可以用于读取和写入数据&#xff0c;并且可以同时进行读写。 一、Java NIO中提供了几种类型的通道&#xff0c;主要有…

一起学数据分析_3(模型建立与评估_1)

使用前面清洗好的数据来建立模型。使用自变量数据来预测是否存活&#xff08;因变量&#xff09;&#xff1f; &#xff08;根据问题特征&#xff0c;选择合适的算法&#xff09;算法选择路径&#xff1a; 1.切割训练集与测试集 import pandas as pd import numpy as np impo…

机器学习——编程实现从零构造训练集的决策树

自己搭建一棵决策树【长文预警】 忙了一个周末就写到了“构建决策树”这一步&#xff0c;还没有考虑划分测试集、验证集、“缺失值、连续值”&#xff0c;预剪枝、后剪枝的部分&#xff0c;后面再补吧&#xff08;挖坑&#xff09; 第二节内容&#xff1a;验证集划分\k折交叉…

字符串篇(四)

文章目录 1.26 ljust()函数1.27 lower()函数1.28 lstrip()函数1.29 maketrans()函数1.30 partition()函数1.31 replace()函数1.32 rfind()函数1.33 rindex()函数 1.26 ljust()函数 ljust() 是 Python 中字符串&#xff08;str&#xff09;对象的一个方法&#xff0c;用于将字符…

android、Jetpack Compose使用 Room数据库kapt注解时出现的相关问题整理。

谢谢阅览、关注!! 一、问题描述: 问题 1:> a failure occurred while executing org.jetbrains.kotlin.compilerrunner.gradlecompilerrunnerwithworkers$gradlekotlincompilerworkaction > internal compiler error. see log for more details 问题 2:a failure …

在Spring Boo动态修改日志级别

在Spring Boot中&#xff0c;可以通过编程的方式动态修改日志级别。以下是一个简单的例子&#xff0c;展示了如何使用Logback&#xff08;Spring Boot默认的日志框架&#xff09;来实现这一功能。 首先&#xff0c;确保你的项目已经包含了spring-boot-starter-logging依赖。 …

python爬虫之xpath入门

文章目录 一、前言参考文档&#xff1a; 二、xpath语法-基础语法常用路径表达式举例说明 三、xpath语法-谓语表达式举例注意 四、xpath语法-通配符语法实例 五、选取多个路径实例 六、Xpath Helper安装使用说明例子&#xff1a; 七、python中 xpath 的使用安装xpath 的依赖包xm…

基于yolov2深度学习网络的人脸检测matlab仿真,图像来自UMass数据集

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 网络架构与特征提取 4.2 输出表示 4.3损失函数设计 4.4预测阶段 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载…

爱注讲台三尺案不辞长作“育花”人

—记邵阳市优秀班主任、新宁县优秀教师周芳平 教育是人与人心灵上最美妙的接触&#xff0c;只要用心体察&#xff0c;用情关注&#xff0c;每一位学生都会走向金光大道。 ---题记 “亲爱的妈妈&#xff0c;祝您节日快乐&#xff01;”2024年3月8日&#xff0c;一条从深圳华为…

28-3 文件上传漏洞 -白盒审计绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、upload-labs 靶场的第7关 先进行代码审计 $is_upload = false; $msg = null; if (isset($_POST[submit])) {if (file_exists($UPLOAD_ADDR)) {$deny_ext = array(".php&…

机器学习 - PyTorch里的aggregation

在PyTorch里&#xff0c;可以在tensor里找到min, max, mean, sum 等aggregation值。 直接上代码 import torch x torch.arange(0, 100, 10) print(x) print(f"Minimum: {x.min()}") print(f"Minimum: {torch.min(x)}") print(f"Maximum: {x.max()}…

Spring Boot:筑基

Spring Boot 前言概述使用 Intellij idea 快速创建 Spring Boot 项目注意事项 前言 在学习 Spring 、SpringMVC 、MyBatis 和 JPA 框架的过程中&#xff0c;了解到 SSM 框架为 Java Web 开发提供了强大的后端支持&#xff0c;JPA 框架则简化了数据库的操作。然而&#xff0c;S…

安卓面试题多线程36-40

36. 请问什么是锁消除和锁粗化?(1)锁消除 所消除就是虚拟机根据一个对象是否真正存在同步情况,若不存在同步情况,则对该对象的访问无需经过加锁解锁的操作。 比如StringBuffer的append方法,因为append方法需要判断对象是否被占用,而如果代码不存在锁竞争,那么这部分的性…

Cesium:按行列绘制3DTiles的等分线

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制 3DTiles 对象的外包盒等分线。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵是…

算法第三十一天-区域和检索【数组不可变】

区域和检索-数组不可变 题目要求 解题思路 为方便描述&#xff0c;把 n u m s nums nums 记作 a a a。 对于数组 a a a&#xff0c;定义它的前缀和 s [ 0 ] 0 s [ 1 ] a [ 0 ] s [ 2 ] a [ 0 ] a [ 1 ] ⋮ s [ i ] a [ 0 ] a [ 1 ] ⋯ a [ i − 1 ] ∑ j 0 i −…

matplotlib使用总结1

matplotlib 是一个用于创建静态、动态和交云图的 Python 绘图库。它可以用于 Python 脚本、Python 和 IPython shell、Jupyter 笔记本、web 应用服务器以及四个图形用户界面工具包中。matplotlib 尝试让简单的事情更简单&#xff0c;让困难的事情成为可能。你可以生成线图、柱状…