首页 > 其他分享 >代理模式

代理模式

时间:2023-09-24 13:11:40浏览次数:40  
标签:std info chrono 代理 模式 ServerInfo ServerInfoGetter include

工作场景:让用户根据接口查询系统各资源占用率

  • 优化用户性能

传统代码:

传统代码
//main.cpp
#include <iostream>

#include "ServerInfoGetter.h"

#include <chrono>
#include <thread>
int main()
{
	ServerInfoGetter getter;
	ServerInfo info = getter.getInfo();

	while (1) {
		std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
		long long currentTime = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch()).count();

		if (currentTime - info.createTime >= 2000) {
			info = getter.getInfo();
		}
		else {
			// .....
		}

		std::this_thread::sleep_for(std::chrono::milliseconds(2000));
	}
	return 0;
}

//ServerInfoGetter.h
#include "ServerInfoGetter.h"


ServerInfo ServerInfoGetter::getInfo()
{
	ServerInfo info;
	info.cpu = 0.45;
	info.mem = 0.23;
	return info;
}

//
#pragma onServerInfoGetter.hce

#include "ServerInfo.h"

class ServerInfoGetter
{
public:
	ServerInfo getInfo();
};

//ServerInfo.h
#pragma once
class ServerInfo
{
public:
	ServerInfo();

	float cpu;
	float mem;

	long long createTime;
};

//ServerInfo.cpp
#include "ServerInfo.h"
#include <chrono>
#include <thread>

ServerInfo::ServerInfo()
{
	std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
	createTime = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch()).count();
}
  • ServerInfoGetter::getInfo()返回用户要查询的系统占用值
  • ServerInfo::ServerInfo封装了getinfo返回值的类型
  • ServerInfoGetter getter; ServerInfo info = getter.getInfo();在死循环里面每两秒发送信息给用户,

标签:std,info,chrono,代理,模式,ServerInfo,ServerInfoGetter,include
From: https://www.cnblogs.com/Gal0721/p/17725876.html

相关文章

  • Redis搭建哨兵模式架构
    使用Docker安装因为配置太复杂,所以这里我们使用dockercompose来一键部署不使用内部网络搭建编写redis主从docker-compose.ymlversion:'3'services:master:image:rediscontainer_name:redis-masterrestart:alwayscommand:redis-server--requi......
  • 工厂模式
    工作场景:编写一个给用户发送短信的程序传统写法#include<stdio.h>#include<string>enumNotifMessageType{WUDI,FEITIAN};classNotifMessage{public:intsendMessage(longlonguserId,std::string&msg,NotifMessageTypetype){s......
  • 模式
    模式2.7.1.1、模式的定义定义模式实际上定义了一个命名空间,在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。在CREATESCHEMA中可以接受CREATETABLE,CREATEVIEW和GRANT子句。CREATESCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<......
  • 关于一些《软件设计模式》的一些基础笔记
    ......
  • 观察者模式在事件驱动中的运用
    title:观察者模式在事件驱动中的运用categories:-Javatags:-设计模式abbrlink:53cb85e5date:2023-03-0215:06:28在面对一些较为复杂的业务时,合理的使用事件驱动设计,能够帮助我们对主业务逻辑和分支业务逻辑进行解耦,更好的实现开闭原则。什么是观察者模式?观察......
  • 品易代理IP测试,9月最新代理IP质量测试
    在当今互联网大数据时代,数据采集日益发展,HTTP代理在其中扮演着重要的角色。和其他产品一样,在使用HTTP代理的时候我们也会遇到诸如:稳定性、匿名程度、响应速度、IP池可用率等问题,如何对HTTP代理进行测试,才能满足我们的需求?目前市面上很多HTTP代理都有提供试用,购买之前大部分人都会试......
  • 基于BS模式的教务管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要在科技快速发展的今天,各个行业都在不断地跟上时代的潮流,利用科技的力量来提升自己的竞争力。教务管理体系自然也不例外,互联网技术的日益成熟,推动了教务管理体系的建立,从根本上改变了以往的传统管理模式;不但降低了服务管理的难度,还提高了管理的灵活性。教务管理系统,主要的模......
  • 单例模式(一些误区)
    工作场景:其他调用者直接创建类的对象,而不是使用内置的getinstance创建对象怎么解决(只能通过getinstance创建对象)创建对象就必须使用构造函数,把构造函数设置为私有的,如果在外部类或者文件调用就会报错把指针也设置私有防止乱改其是否为空影响对象创建使用getinstance返回......
  • 单例模式
    工作场景:配置文件 比如redis的配置文件redis.conf里面包涵连接数据库需要的连接信息、用户名、用户密码等配置信息,每个用户都有这个可修改的配置文件进行数据库连接个性化配置(这份文件不能写死但大体内容类似),所以需要使用设计模式思想进行代码复用,这里采将会用设计模式里的单......
  • nginx代理websocket请求原理 理解记录
    最近遇见一个问题,在OpenEuler操作系统上,如果不主动开放端口白名单的话,就无法访问该端口。然后我部署了一个服务,端口是5200。在这台机器上部署了一个nginx,通过nginx80端口反向代理5200端口。然后再OpenEuler上开放80端口。此时本地访问80端口,登录后正常的http请求都没问题。......