Go命令
go 1.12 1.go build编译包和依赖用法:go build [-o output] [-i] [build flags] [packages] -o 指定输出的文件名,可以带上路径,例如 go build -o a/b/c -i 安装相应的包,编译+go install -a 更新全部已经是最新的包的,但是对标准包不适用 -n 把需要执行的编译命令打印出来,但是不执行 -p n 指定可以并行可运行的编译数目,默认是CPU数目 -race 开启编译的时候自动检测数据竞争的情况,目前只支持64位的机器 -v 打印出来我们正在编译的包名 -msan 启用与内存清理程序的操作。仅在linux / amd64,linux / arm64上支持并且只有Clang / LLVM作为主机C编译器。 -work 打印出来编译时候的临时文件夹名称,并且如果已经存在的话就不要删除 -x 打印出来执行的命令,其实就是和-n的结果类似,只是这个会执行 -ccflags 'arg list' 传递参数给5c, 6c, 8c...
小工具
http://www.rejetto.com/hfs/ 小型http服务器,可用于前端调试 你可以通过下面链接发现更多的 Go 编辑器的插件: https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins http://www.q-dir.com/ https://www.heidisql.com/ https://cmder.net/ (https://github.com/cmderdev/cmder/releases) cmder.exe /REGISTER ALL http://www.cygwin.com apt-cyg install nano cmder 12task->Startup->Tasks->新增task(+)->Commands->cmd.exe /k "C:\cygwin64\Cygwin.bat"task->Startup->Environment->chcp gbk cygwin 1234567891...
wrk压力测试
wrk压力测试 GitHub - wg/wrk: Modern HTTP benchmarking tool wrk 是一个比较先进的 HTTP 压力测试工具,当在单个多核 CPU 上运行时,能够产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如 epoll 和 kqueue。 可选的 LuaJIT 脚本可以执行 HTTP 请求生成,响应处理和自定义报告。 1. wrk工具编译1234# https://github.com/tsliwowicz/go-wrkgit clone https://github.com/wg/wrk.gitcd wrkmake 2. wrk参数说明wrk -h 12345678-c, --connections <N> 跟服务器建立并保持的TCP连接数量-d, --duration <T> 压测时间-t, --threads <N> 使用多少个线程进行压测,压测时,是有一个主线程来控制我们设置的n个子线程间调度-s, --script <S> 指...
grpc-网关
HTTP网关源自coreos的一篇博客 Take a REST with HTTP/2, Protobufs, and Swagger。 etcd3 API全面升级为gRPC后,同时要提供REST API服务,维护两个版本的服务显然不太合理,所以grpc-gateway诞生了。通过protobuf的自定义option实现了一个网关,服务端同时开启gRPC和HTTP服务,HTTP服务接收客户端请求后转换为grpc请求数据,获取响应后转为json数据返回给客户端。 结构如图: 安装grpc-gateway12$ git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto$ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway 目录结构12345678910111213141516|—— hello_http/ |—— client/ |—— main.go...
grpc-trace例子
内置Tracegrpc内置了客户端和服务端的请求追踪,基于golang.org/x/net/trace包实现,默认是开启状态,可以查看事件和请求日志,对于基本的请求状态查看调试也是很有帮助的,客户端与服务端基本一致,这里以服务端开启trace server为例,修改hello项目服务端代码: 目录结构123456789|—— hello_trace/ |—— client/ |—— main.go // 客户端 |—— server/ |—— main.go // 服务端|—— proto/ |—— hello/ |—— hello.proto // proto描述文件 |—— hello.pb.go // proto编译后文件 示例代码服务端 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package mainimport ( "fmt" "net" "net...
grpc-拦截器例子
Interceptor 拦截器grpc服务端和客户端都提供了interceptor功能,功能类似middleware,很适合在这里处理验证、日志等流程。 在自定义Token认证的示例中,认证信息是由每个服务中的方法处理并认证的,如果有大量的接口方法,这种姿势就太不优雅了,每个接口实现都要先处理认证信息。这个时候interceptor就可以用来解决了这个问题,在请求被转到具体接口之前处理认证信息,一处认证,到处无忧。在客户端,我们增加一个请求日志,记录请求相关的参数和耗时等等。修改hello_token项目实现: 目录结构123456789101112|—— hello_interceptor/ |—— client/ |—— main.go // 客户端 |—— server/ |—— main.go // 服务端|—— keys/ // 证书目录 |—— server.key |—— server.pem|—— proto/ |—— hello/ |—— hello.proto // proto描述文件 |—— hello.pb.g...
grpc-认证例子
认证gRPC默认内置了两种认证方式: SSL/TLS认证方式 基于Token的认证方式 同时,gRPC提供了接口用于扩展自定义认证方式 TLS认证示例这里直接扩展hello项目,实现TLS认证机制 首先需要准备证书,在hello目录新建keys目录用于存放证书文件。 证书制作制作私钥 (.key)12345# Key considerations for algorithm "RSA" ≥ 2048-bit$ openssl genrsa -out server.key 2048# Key considerations for algorithm "ECDSA" ≥ secp384r1# List ECDSA the supported curves (openssl ecparam -list_curves)$ openssl ecparam -genkey -name secp384r1 -out server.key 自签名公钥(x509) (PEM-encodings .pem|.crt)1$ openssl re...
grpc-Hello例子
Hello gRPC按照惯例,这里也从一个Hello项目开始,本项目定义了一个Hello Service,客户端发送包含字符串名字的请求,服务端返回Hello消息。 流程 编写.proto描述文件 编译生成.pb.go文件 服务端实现约定的接口并提供服务 客户端按照约定调用.pb.go文件中的方法请求服务 环境下载对应平台的代码生成工具(或者自行编译) https://github.com/google/protobuf/releases 安装编译插件 12345678910111213# 在gopath的bin目录下生成protoc-gen-go.exego get -u github.com/golang/protobuf/{proto,protoc-gen-go}git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpcgit clone https://github.com/golang/net.git $GOPATH/src/golang.org...
grpc-go教程
gRPC 基础: Go本教程提供了 Go 程序员如何使用 gRPC 的指南。 通过学习教程中例子,你可以学会如何: 在一个 .proto 文件内定义服务。 用 protocol buffer 编译器生成服务器和客户端代码。 使用 gRPC 的 Go API 为你的服务实现一个简单的客户端和服务器。 假设你已经阅读了概览 并且熟悉protocol buffers。 注意,教程中的例子使用的是 protocol buffers 语言的 proto3 版本,它目前只是 alpha 版:可以在 proto3 语言指南和 protocol buffers 的 Github 仓库的版本注释发现更多关于新版本的内容。 这算不上是一个在 Go 中使用 gRPC 的综合指南:以后会有更多的参考文档. 为什么使用 gRPC?我们的例子是一个简单的路由映射的应用,它允许客户端获取路由特性的信息,生成路由的总结,以及交互路由信息,如服务器和其他客户端的流量更新。 有了 gRPC, 我们可以一次性的在一个 .proto 文件中定义服务并使用任何支持它的语言去实现客户端和服务器,反过来,它们可以在各种...
grpc-通讯协议
HTTP2 协议上的 gRPC本文档作为 gRPC 在 HTTP2 草案17框架上的实现的详细描述,假设你已经熟悉 HTTP2 的规范。产品规则采用的是ABNF 语法 大纲以下是 gRPC 请求和应答消息流中一般的消息顺序: 请求 → 请求报头 *有定界符的消息 EOS 应答 → 应答报头 *有定界符的消息 EOS 应答 → (应答报头 *有定界符的消息 跟踪信息) / 仅仅跟踪时 请求 请求 → 请求报头 *界定的消息 EOS 请求报头是通过报头+联系帧方式以 HTTP2 报头来发送的。 请求报头 → 调用定义 *自定义元数据 调用定义 → 方法模式路径TE [授权] [超时] [内容类型] [消息类型] [消息编码] [接受消息类型] [用户代理] 方法 → “:method POST” 模式 → “:scheme ” (“http” / “https”) 路径 → “:path” {开放的 API 对应的方法路径} Authority → “:authority” {授权的对应的虚拟主机域名} TE → “te” “trailers” # ...
grpc-错误处理和调试
错误处理和调试错误处理此页面描述了gRPC如何处理错误,包括gRPC的内置错误代码。 可以在此处找到不同语言的示例代码。 错误模型正如您在我们的概念文档和示例中所看到的,当gRPC调用成功完成时,服务器会向客户端返回OK状态(取决于语言,OK状态可能会或可能不会直接在您的代码中使用)。 但如果通话不成功会怎样? 如果发生错误,gRPC会返回其错误状态代码之一,并带有可选的字符串错误消息,该消息提供有关所发生情况的更多详细信息。 所有支持的语言中的gRPC客户端都可以使用错误信息。错误状态代码 gRPC在各种情况下引发错误,从网络故障到未经认证的连接,每个连接都与特定的状态代码相关联。 所有gRPC语言都支持以下错误状态代码。 一般错误GRPC_STATUS_CANCELLED 客户端应用程序取消了请求 GRPC_STATUS_DEADLINE_EXCEEDED 截止日期在服务器返回状态之前到期 GRPC_STATUS_UNIMPLEMENTED 在服务器上找不到方法 GRPC_STATUS_UNAVAILABLE 服务器关闭 GRPC_STATUS_UNKNOWN 服务器抛出异...
grpc-安全认证
认证gRPC 被设计成可以利用插件的形式支持多种授权机制。本文档对多种支持的授权机制提供了一个概览,并且用例子来论述对应API,最后就其扩展性作了讨论。 马上将会推出更多文档和例子。 支持的授权机制SSL/TLSgRP 集成 SSL/TLS 并对服务端授权所使用的 SSL/TLS 进行了改良,对客户端和服务端交换的所有数据进行了加密。对客户端来讲提供了可选的机制提供凭证来获得共同的授权。 OAuth 2.0gRPC 提供通用的机制(后续进行描述)来对请求和应答附加基于元数据的凭证。当通过 gRPC 访问 Google API 时,会为一定的授权流程提供额外的获取访问令牌的支持,这将通过以下代码例子进行展示。 警告:Google OAuth2 凭证应该仅用于连接 Google 的服务。把 Google 对应的 OAuth2 令牌发往非 Google 的服务会导致令牌被窃取用作冒充客户端来访问 Google 的服务。 API为了减少复杂性和将混乱最小化, gRPC 以一个统一的凭证对象来进行工作。 凭证可以是以下两类: 频道凭证, 被附加在 频道上,...
grpc-概念
gRPC 概念本文档通过对于 gRPC 的架构和 RPC 生命周期的概览来介绍 gRPC 的主要概念。本文是在假设你已经读过文档部分的前提下展开的。针对具体语言细节请查看对应语言的快速开始、教程和参考文档(很快就会有完整的文档)。 概览服务定义正如其他 RPC 系统,gRPC 基于如下思想:定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型。gRPC 默认使用 protocol buffers 作为接口定义语言,来描述服务接口和有效载荷消息结构。如果有需要的话,可以使用其他替代方案。 1234567891011service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse);}message HelloRequest { required string greeting = 1;}message HelloResponse { required string reply = 1;} gRPC 允许你定义四类服务方法: ...
grpc-快速开始
开始欢迎进入 gRPC 的开发文档,gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 本文档通过快速概述和一个简单的 Hello World 例子来向您介绍 gRPC 。你可以在本站发现更详细的教程和参考文档——文档将会越来越丰富。 快速开始为了直观地着手运行 gRPC,可以从你所选择的语言对应的快速开始入手,里面包含创建这个列子的安装指导、快速上手指南等更多内容。 C++ Java Go Python Ruby Node.js Android Java C# Objective-C PHP 你可以从这里找到 gRPC 的源码库。我们大多数例子都在源码库 examples 目录下。 gRPC 是什么?在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥...
grpc学习资料
grpc官网文档:https://grpc.io/docs/guides/ grpc官网文档(中文版):http://doc.oschina.net/grpc grpc接口文档:https://godoc.org/google.golang.org/grpc grpc相关书籍:https://www.bookstack.cn/search/result?wd=grpc
Flex布局
一、Flex 布局是什么? 转载:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool原作者:阮一峰 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为 Flex 布局。 123.box{ display: flex;} 行内元素也可以使用 Flex 布局。 123.box{ display: inline-flex;} Webkit 内核的浏览器,必须加上-webkit前缀。 1234.box{ display: -webkit-flex; /* Safari */ display: flex;} 注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。 二、基本概念采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容...
npm常用命令
npm常用命令123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104#初始化 引导你创建一个package.json文件npm init#查看package.json文件内容格式npm help json#安装模块 (install 可简写为 i)npm install moduleName#全局安装npm install moduleName -g#更新本机npm的版本npm install -g#设置镜像源npm config set registry http://registry.npm.taobao.orgnpm config set registry https://registry.npmjs.org#安装packa...
前端常见跨域解决方案
前端常见跨域解决方案什么是跨域?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义的跨域: 1231.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入: <link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链3.) 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等 其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。 什么是同源策略?同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 同源策略限制以下几种行为: 1231.) Cookie、LocalStorage 和 IndexDB 无...
跨域CORS原理
跨域CORS原理上篇博客介绍了JSONP原理,其不足,就是只能使用GET提交,若传输的数据量大,这个JSONP方式就歇菜了。那这篇博客就来介绍另一种跨域介绍方案—CORS。 相对JSONP,CORS支持POST提交,并且实施起来灰常简单,CORS原理只需要向响应头header中注入Access-Control-Allow-Origin,这样浏览器检测到header中的Access-Control-Allow-Origin,则就可以跨域操作了。 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 一、简介CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多...
pjax局部页面刷新
pjax = pushState + ajaxpjax是一个jQuery插件,它通过ajax和pushState技术提供了极速的(无刷新ajax加载)浏览体验,并且保持了真实的地址、网页标题,浏览器的后退(前进)按钮也可以正常使用。 pjax的工作原理是通过ajax从服务器端获取HTML,在页面中用获取到的HTML替换指定容器元素中的内容。然后使用pushState技术更新浏览器地址栏中的当前地址。以下两点原因决定了pjax会有更快的浏览体验: 不存在页面资源(js/css)的重复加载和应用; 如果服务器端配置了pjax,它可以只渲染页面局部内容,从而避免服务器渲染完整布局的额外开销。 项目现状jquery-pjax的维护方向:可能会继续修复重要的bug,但其功能不会再发生变化,即不会再实现新功能,也不会再扩展现有功能。 安装pjax依赖于jQuery 1.8或者更高版本。 通过npm安装1$ npm install jquery-pjax 通过js引入下载 jquery.pjax.js 插件并在页面中引用: 1curl -LO https://raw...