next

nginx:反向代理到grpc server

不羁岁月 提交于 2020-11-12 20:43:14
1.nginx 反向代理到grpc http http v2 (grpc) 后端golang使用了grpc开发了部分微服务,访问时直接使用端口请求。 安全隐患,需要开放端口. grpc的go服务器,没有前置的nginx作为缓冲,难以支持大量请求。 直接让公网的请求连接到go编写的grpc的服务,遇到慢请求时,会被拖垮。 eg:每一个客户端的请求上传大文件时,占用一个grpc连接, 公网耗时较长, 且grpc server处理效率较低. eg:nginx在接收到上传的文件后,代理请求, 在内网直接连接go grpc server, 优于外网直接连接. 2.grpc app 配置 grpc app: 端口 127.0.0.1:9091 127.0.0.1:9092 3.nginx conf grpcapp.conf: upstream grpcservers { hash $request_uri; server 127.0.0.1:9002; server 127.0.0.1:9003; } server { listen 9090 http2; access_log ./logs/grpc_app/api.access.log ; error_log ./logs/grpc_app/api.errors.log ; location / { grpc_pass grpc:/

ES6对于数组的扩展

做~自己de王妃 提交于 2020-11-12 17:54:40
扩展运算符(...),用于将数组转化为逗号分隔的参数序列。 ...实现数组的拷贝: 数组是一维数组时,扩展运算符可以深拷贝一个数组(对象同理): let arr = [1, 2, 3, 4, 5, 6 ]; let arr1 = [...arr]; arr == arr1 // false 当数组为多维时,数组中的数组变成浅拷贝(对象同理): let arr = [1, 2, 3, 4, 5, 6, [1, 2, 3 ]]; let arr1 = [...arr]; arr1.push( 7 ); arr1[arr1.length - 2][0] = 100 ; console.log(arr); // [1, 2, 3, 4, 5, 6,[100, 2, 3]] console.log(arr1); // [1, 2, 3, 4, 5, 6, [100, 2, 3],7] 合并数组: [...arr,...arr2,...arr3] // 结合解构赋值,生成剩余数组 -- 扩展运算符只能置于参数最后 let [one,...rest] = [1,2,3,4,5 ]; one // 1 rest // [2,3,4,5] // 扩展字符串成数组 [... 'babe'] // ["b", "a", "b", "e"] // 可以把类数组对象转换为真正的数组 function

编辑器之神—vim编辑器

我只是一个虾纸丫 提交于 2020-11-12 14:40:56
编辑器之神—vim编辑器 学习目标 1、了解vim编辑器的基本概念 2、了解vi与Vim编辑器之间的关系 3、了解Vim编辑器的是哪种模式 4、掌握命令模式下的相关指令 5、掌握末行模式下的相关概念 6、了解末行模式扩展概念 7、了解Vim编辑器的几个实用功能 一、Vim编辑器概述(了解) 1、vi编辑器 vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的notepad(记事本)编辑器。学会它后,我们将在Linux 的世界里畅行无阻。 2、vi与Vim编辑器 Vim是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。 3、Vim编辑器学习重点 Vim 重点是光标的移动,模式切换,删除,查找,替换,复制,粘贴,撤销等命令的使用。 命令:# vim 效果如下图所示: 二、Vim编辑器的三种模式(重点) 1、三种模式 Vim 中存在三种模式(大众的认知):命令模式、编辑模式(输入/插入模式)、末行模式(尾行模式) ① 命令模式:在该模式下是不能对文件直接编辑,可以输入快捷键(命令)进行一些操作(复制、粘贴、删除等等) 注意:当我们使用Vim编辑器,打开某个文件后默认进入的模式就是命令模式 ② 编辑模式:在该模式下可以对文件的内容进行编辑 ③ 末行模式

【逗老师带你学IT】Kiwi Syslog Server安装和配置教程

时光毁灭记忆、已成空白 提交于 2020-11-12 14:13:12
Kiwi Syslog Server是一款应用于Windows系统的系统日志守护进程,能够接收并记录系统日志,各种设备的SYSLOG消息,内置丰富的日志记录选项,能详细记录各种防火墙日志,并进行筛选分析。 本文主要介绍Kiwi Syslog Server安装教程 @[TOC] 一、准备工作 1、 windows server 服务器一台 2、 kiwi_syslog_server软件及注册机 软件连接: https://download.csdn.net/download/ytlzq0228/12244828 免积分下载 二、安装kiwi_syslog_server软件 1、点击安装软件,一路Next直到安装完成 2、安装完成后在任务管理器中先结束掉syslogd_service的进程 3、将“Keygen注册机”文件夹中SolarWinds.Licensing.Framework.dll和ufmod.dll复制到软件安装目录“C:\Program Files (x86)\Syslogd”覆盖 三、激活软件,默认只有15天有效期; 1、Help>Enter License Details 2、选择手工激活 3、点击复制设备ID,弹出框点击确定 4、打开注册机keygen程序 5、将ID复制进去,username随便填,时间默认就行 6、然后点Generate!导出文件

【数据结构】二叉树的创建、遍历以及广度深度优先搜索的实现

喜欢而已 提交于 2020-11-12 08:29:29
先序、中序、后序遍历主要依靠递归来实现 广度优先搜索主要依靠队列(先进先出),深度优先依靠栈(先进后出) #include<iostream> using namespace std; template < class T> struct Node { T data; Node <T> * next; }; template < class T> class LinkStack { private : Node <T> * top; public : LinkStack(); ~ LinkStack(); void Push(T x); T Pop(); T Top(); bool Empty(); }; template < class T> LinkStack <T> ::LinkStack() { top = NULL; } template < class T> LinkStack <T>::~ LinkStack() { Node <T> *p = top; while (p) { Node <T> *q = p; p = p-> next; delete q; } top = NULL; } template < class T> void LinkStack<T> ::Push(T x) { Node <T> *s = new Node<T> (); s ->data

Python帮你把B站上喜欢的视频下载下来

霸气de小男生 提交于 2020-11-12 03:58:17
5月3日晚,央视在《新闻联播》前播放了B站青年宣言片《后浪》,这是B站首次登陆央视黄金时段,今天在朋友圈陆续看到相关的视频。最早用B站的同学都知道,B站是和A站以异曲同工的鬼畜视频及动漫,进入到大众视野的非主流视频网站。 哔哩哔哩 现为国内领 先的年轻人娱乐、文化社区,该网站于2009年6月26日创建,被粉丝们亲切的称为“B站”。 B站之所以火,是因为趣味与知识并存。它是一个重度宅腐二次元集结地。B站包含动漫、漫画、游戏,也有很多由繁到简、五花八门的视频,很多冷门的软件和绘画技巧在B站都可以找到完整的教学视频。 正如一句“你在B站看番,我在B站学习”,B站还是有一些质量比较好的学习视频。当你在B站上看到喜欢的视频想保存下来时,怎么办呢? 转入正题,本篇推文主要介绍如何将B站上把喜欢的视频下载下来,帮助更多需要学习的小伙伴,详细步骤如下: 网页分析 视频下载方法 成果展示 网页分析 微信视频号的加入,再度引燃了短 视频领域,今天我们 爬取B站的每天播放量最多的小视频,其他类型的视频可以参考这个方法。 网址为: 'http://vc.bilibili.com/p/eden/rank#/?tab=全部' 我们可以看到Request URL这个属性值,我们向下滑动加载视频的过程中,发现只有这段url是不变的。next_offset 会一直变化,我们可以猜测,这个可能就是获取下一个视频序号

Winform随机点名

你说的曾经没有我的故事 提交于 2020-11-11 21:48:01
点击随机抽取,lable1可以改变人员的姓名。 代码如下: 1.声明一个数组,里面进行存放人员的姓名。 string[] names = { "张三", "李四", "王五", "诸葛亮", "张飞", "关羽", "李白", "张亮", "荆轲", "吕布" }; 2.设置定时器timer控件,进行每隔多长时间进行抽取人员的姓名。     private void Form1_Load(object sender, EventArgs e)   {     //姓名显示速度     timer1.Interval = 10;   } 3.点击按钮   private void button2_Click(object sender, EventArgs e)   {     //开始或暂停timer1     timer1.Enabled = button2.Text == "开始" ? true : false;     //修改按钮文字     button2.Text = button2.Text == "开始" ? "暂停" : "开始";   } 4.在timer点击事件中显示人员的名字   private void timer1_Tick(object sender, EventArgs e)   {     //随机显示一个姓名     label1.Text =

vba下selenium Chrome 无头模式抓取Mtime新闻示例代码

孤街浪徒 提交于 2020-11-11 19:48:07
Sub qwe() Dim driver As New ChromeDriver, post As Object With driver .AddArgument "--headless" ''This is the fix .Get " http://news.mtime.com " End With For Each post In driver.FindElementByClass("newscontent").FindElementsByTag("h4") Debug.Print (post.Text) Next post End Sub 来源: oschina 链接: https://my.oschina.net/u/4330611/blog/4713066

最小生成树

允我心安 提交于 2020-11-11 15:02:33
INTRODUCTION 一个有 n 个结点的 连通图 的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树可以用 kruskal (克鲁斯卡尔)算法或 prim (普里姆)算法求出。 --百度百科 概述 在一给定的 无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此 边 的权重,若存在 T 为 E 的 子集 (即)且为无循环图,使得 的 w(T) 最小,则此 T 为 G 的 最小生成树 。 最小生成树其实是 最小权重生成树 的简称。 --百度百科 最小生成树的性质: 最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个非空真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存在G的一棵最小生成树包括此边(u,v)。--百度百科 通俗来说 对于一个连通图,若已经求出最小生成树A,则若能找出最小生成树B与A不同 则这个图中,至少有两条边边权相等,且两条边在同一个环上,删去这两条边中的任意一条不影响原图的连通性, 且在生成树A,B中等边权的边的数量相等 推论 对于一个连通图,将他制成一颗生成树,使他的最大边最小,则这棵树是该图的最小生成树

ACM学习笔记_week5(待补充)

时光毁灭记忆、已成空白 提交于 2020-11-11 14:59:27
本周学习内容 字符串基础 哈希 KMP manecher 字符串基础 String类相关函数 eg.查找给定字符串(str)并把相应子串(src)替换为另一给定字符串(dest) int str_replace ( string & str , string & src , string & dest ) { int counter = 0 ; int pos = 0 ; while ( ( pos = str . find ( src , pos ) ) != string :: npos ) { str . replace ( pos , src . size ( ) , dest ) ; ++ counter ; pos + = dest . size ( ) ; } return counter ; //返回替换的次数 } 哈希 相当于函数中的映射,把字符串经过hash后变成一个值,不同字符串的hash值基本不会重合。 hash[i] = hash[i - 1] * base + (s[i] - ‘a’); 取字符串s[l,r]hash值: hash[l,r]=f[r]-f[l-1]*p[r-l+1]。 void init ( ) { p [ 0 ] = 1 ; hash [ 0 ] = 0 ; int n = strlen ( s + 1 ) ; for ( int i