Flutter Grpc Client 连接池_flutter grpc长连接-程序员宅基地

技术标签: Flutter  Grpc  

关于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;//时长除以次数,越小优先级越高
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30903139/article/details/88558352

智能推荐

清除浮动的几种常用的方法_li怎么消除浮动-程序员宅基地

文章浏览阅读326次。先来看设置浮动后,未清除的效果:我们给父元素设置了背景颜色,但是由于浮动,此时没有背景颜色 清除浮动 .father{ border: 1px solid red; background: #fc9; } .div1{ width: 80px; height: 80px; background: red; float: le_li怎么消除浮动

【Camera Sensor Driver笔记】三、点亮指南之Sensor DTS-程序员宅基地

文章浏览阅读433次,点赞3次,收藏7次。== camera sensor 接口配置xxsensor.cpp -> xxxsensor.soCalculateExposure 函数 pCalculateExposure函数 (平台)输入参数: pCalculateExposureData realgain :total gain,ae算法传过来的值或者手动曝光的值 linecount:经过平台已经转换过的曝光时间 middlerealg

matlab编程勒让德多项式展开例题解析,第19 勒让德多项式 球函数习题及解答-程序员宅基地

文章浏览阅读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编程求解勒让德多项式事例

C#学习笔记 07.01_输入值是一个class-程序员宅基地

文章浏览阅读89次。C#学习笔记 07.01(学习视频来自bilibili的传智播客赵老师基础教学视频)ref参数被 ref 修饰的参数拥有了输入输出二合一的属性,就是被这个修饰的变量,就既是方法的输入参数,又是返回参数。还是举个例子: public static void jiaoHuan(ref int a, ref int b) { int temp; temp = a; a = b; _输入值是一个class

pm2集群模式mysql配置_配置 PM2 一键部署-程序员宅基地

文章浏览阅读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

Python PyQt5简介_qt5 python-程序员宅基地

文章浏览阅读316次。本篇文章适合想要学习PyQt5的且为初学者人群(但必须会python的基本语法),我会为大家介绍使用pyqt编写的gui程序的基本结构,旨在帮助初学者能快速地理清如何使用pyqtwindows11python3pyqt5(已经有pyqt6了,但由于pyqt5还是用得挺多的)以上就是今天要讲的内容,本文仅仅简单介绍了PyQt5,通过这篇文章至少能了解到PyQt5的最简单的结构与基本使用方法。_qt5 python

随便推点

依赖包安全漏洞扫描工具——Dependency-Check(OWASP)_jar包漏洞扫描-程序员宅基地

文章浏览阅读1k次,点赞9次,收藏10次。只介绍命令的方式,maven 插件需要授权不好用暂不做介绍。后期如果有需求再补充。点击下载即可:没梯子的用迅雷一样下载。_jar包漏洞扫描

Dart-C、Dart-Kotlin/Java/Swift/Object-C、Kotlin-C数据类型对照表_dart对应kotlin类型-程序员宅基地

文章浏览阅读418次。Dart-C、Dart-Kotlin/Java/Swift/Object-C、Kotlin-C数据类型对照表_dart对应kotlin类型

牛客选择题练习【三】(20道题)(含答案和解析)_public class teststringbuffer{ public static void -程序员宅基地

文章浏览阅读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

【源码运行打包】kkFileView 下载与安装_kkfileview下载-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏18次。本篇博文中,我们将深入探讨如何获取和安装kkFileView软件以及如何运行源码进行打包。文章详细介绍了kkFileView的下载过程,并提供了安装指南,使我们能够轻松获取该软件服务。除此之外,文章还深入讨论了如何运行源码并进行打包,为我们提供了关于使用kkFileView的实用指导。通过文章提供的指引和步骤,我们可以更好地了解kkFileView的使用方式,并且能够按照详细的说明来下载、安装和运行源码进行打包。_kkfileview下载

模型量化与模型验证:关键技术-程序员宅基地

文章浏览阅读860次,点赞25次,收藏10次。1.背景介绍在过去的几年里,人工智能(AI)技术的发展取得了显著的进展,尤其是深度学习(Deep Learning)技术在图像、语音和自然语言处理等领域的应用。随着模型的复杂性和规模的增加,如何有效地量化和验证模型变得越来越重要。模型量化是指将训练好的深度学习模型转换为可在部署设备上运行的格式,而模型验证则是确保模型在实际应用中的性能与训练时的性能保持一致。在这篇文章中,我们将讨论模型量化...

转载:解决ubuntu系统下大多数中文输入法问题-程序员宅基地

文章浏览阅读525次。https://blog.csdn.net/registor892/article/details/54669399

推荐文章

热门文章

相关标签