关于Flutter Grpc Client 连接的管理,我写了一个,有什么不对的和可以优化的还望大家指正一下。
/**
* 类:ClientChannelManager
* 描述:连接池管理器
* 作者:dingzuhua
* 创建时间:2019/3/14 13:20
*/
import 'package:grpc/grpc.dart';
class ClientChannelManager {
static Map<String,ClientChannelManagerObject> clientChannels = new Map();
static int maxChannelNumber = 10;//连接上限数
static String exitKey = '';//优先级最低的key
static ClientChannel getChannel(String host,int port){
//连接存在,取缓存,不存在则创建
if(clientChannels.containsKey(host+'$port')){
//每取一次请求数量加1
clientChannels[host+'$port'].number++;
new Future((){
sort();
});
return clientChannels[host+'$port'].clientChannel;
}else{
return createChannel(host, port);
}
}
static ClientChannel createChannel(String host,int port){
//如果超过连接上限数
if(clientChannels.length>=maxChannelNumber){
ClientChannelManagerObject object = clientChannels[exitKey];
object.clientChannel.shutdown();//关闭优先级最低的连接
clientChannels.remove(exitKey);//清出连接池
}
print('创建连接,端口:$port');
ClientChannel channel = new ClientChannel(host,
port: port,
options: const ChannelOptions(
credentials: const ChannelCredentials.insecure()));
clientChannels[host+'$port'] = new ClientChannelManagerObject()..clientChannel = channel ..number = 1..createtime = new DateTime.now().millisecondsSinceEpoch;
new Future((){
sort();
});
return channel;
}
static void sort(){
//计算优先级
int currentTime = new DateTime.now().millisecondsSinceEpoch;
double maxProportion = 0.0;
clientChannels.forEach((String key,ClientChannelManagerObject value){
value.proportion = (currentTime-value.createtime)/(value.number*1.0);//时长除以次数,越小优先级越高
if(value.proportion>maxProportion){
maxProportion = value.proportion;
exitKey = key;
}
});
}
}
class ClientChannelManagerObject{
ClientChannel clientChannel;
int number;//总共请求次数
int createtime;//第一次创建时间
double proportion;//时长除以次数,越小优先级越高
}
文章浏览阅读326次。先来看设置浮动后,未清除的效果:我们给父元素设置了背景颜色,但是由于浮动,此时没有背景颜色 清除浮动 .father{ border: 1px solid red; background: #fc9; } .div1{ width: 80px; height: 80px; background: red; float: le_li怎么消除浮动
文章浏览阅读433次,点赞3次,收藏7次。== camera sensor 接口配置xxsensor.cpp -> xxxsensor.soCalculateExposure 函数 pCalculateExposure函数 (平台)输入参数: pCalculateExposureData realgain :total gain,ae算法传过来的值或者手动曝光的值 linecount:经过平台已经转换过的曝光时间 middlerealg
文章浏览阅读1.3k次。第19 勒让德多项式 球函数习题及解答————————————————————————————19.1 试证明,其中.19.2计算.【答案】19.3求积分.【答案 】19.4 求积分.【答案 】19.5 证明:19.6 证明:19.7 证明:19.8 计算【答案】19.9 求球内的调和函数,使得它满足边界条件.【答案 】19.10 求下列定解问题【答案】 11P ()d 0n x x -=?1,2..._matlab编程求解勒让德多项式事例
文章浏览阅读89次。C#学习笔记 07.01(学习视频来自bilibili的传智播客赵老师基础教学视频)ref参数被 ref 修饰的参数拥有了输入输出二合一的属性,就是被这个修饰的变量,就既是方法的输入参数,又是返回参数。还是举个例子: public static void jiaoHuan(ref int a, ref int b) { int temp; temp = a; a = b; _输入值是一个class
文章浏览阅读117次。[TOC]# 连接线上数据库~~~var env = process.env.NODE_ENV || ' development'// 格式为 mongodb://usernam:password@host:port/databasevar dbUrl = 'mongodb://root:[email protected]:27017/base'if (env === 'development') ..._pm2连接mysql
文章浏览阅读316次。本篇文章适合想要学习PyQt5的且为初学者人群(但必须会python的基本语法),我会为大家介绍使用pyqt编写的gui程序的基本结构,旨在帮助初学者能快速地理清如何使用pyqtwindows11python3pyqt5(已经有pyqt6了,但由于pyqt5还是用得挺多的)以上就是今天要讲的内容,本文仅仅简单介绍了PyQt5,通过这篇文章至少能了解到PyQt5的最简单的结构与基本使用方法。_qt5 python
文章浏览阅读1k次,点赞9次,收藏10次。只介绍命令的方式,maven 插件需要授权不好用暂不做介绍。后期如果有需求再补充。点击下载即可:没梯子的用迅雷一样下载。_jar包漏洞扫描
文章浏览阅读418次。Dart-C、Dart-Kotlin/Java/Swift/Object-C、Kotlin-C数据类型对照表_dart对应kotlin类型
文章浏览阅读1.6k次。1.下面的程序 编译运行后,在屏幕上显示的结果是(A)public class test { public static void main(String args[]) { int x,y; x=5>>2; y=x>>>2; System.out.println(y); }}A 0B 2C 5D 80解析:右移运算符(>&..._public class teststringbuffer{ public static void main(string args[]){ int n
文章浏览阅读2.6k次,点赞4次,收藏18次。本篇博文中,我们将深入探讨如何获取和安装kkFileView软件以及如何运行源码进行打包。文章详细介绍了kkFileView的下载过程,并提供了安装指南,使我们能够轻松获取该软件服务。除此之外,文章还深入讨论了如何运行源码并进行打包,为我们提供了关于使用kkFileView的实用指导。通过文章提供的指引和步骤,我们可以更好地了解kkFileView的使用方式,并且能够按照详细的说明来下载、安装和运行源码进行打包。_kkfileview下载
文章浏览阅读860次,点赞25次,收藏10次。1.背景介绍在过去的几年里,人工智能(AI)技术的发展取得了显著的进展,尤其是深度学习(Deep Learning)技术在图像、语音和自然语言处理等领域的应用。随着模型的复杂性和规模的增加,如何有效地量化和验证模型变得越来越重要。模型量化是指将训练好的深度学习模型转换为可在部署设备上运行的格式,而模型验证则是确保模型在实际应用中的性能与训练时的性能保持一致。在这篇文章中,我们将讨论模型量化...
文章浏览阅读525次。https://blog.csdn.net/registor892/article/details/54669399