• 幕客老师召集小伙伴
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

HTTP协议版本与Nginx作为grpc代理网管实现

一、HTTP/1.1

持久连接

Connection: Keep-Alive 
Keep-Alive: max=5, timeout=120

HTTP 1.1 建立连接后,默认不会被断开,它允许多个有序的请求,客户端如果想要关闭连接,可以在最后一个请求的请求头中,加上 Connection:close来安全关闭这个连接。或者连接闲置达到指定时间,也可以自动断开连接。

 

二、HTTP/2

HTTP/2 的特性是低延时传输,相比 HTTP 1. 1,主要在二进制协议,多路复用,头信息压缩,推送,请求优先级,安全等方面做了处理。

多路复用

基于二进制协议,TCP 连接打开的时候,所有的数据流都可以传输,而不必打开额外的连接,并且因为有流 id 作为标记,多个响应数据不必要等待就可以直接传回来,解决了 HTTP 1.1 队头阻塞的问题。

 

三、什么grpc

gRPC是由Google主导开发的RPC框架

gRPC提供的从客户端到服务器的整套解决方案

gRPC是一个基于HTTP2.0的协议

 

“h2c”-代表明文HTTP/2

 

四、安装golang解释器环境

了解自己的操作系统版本 32位?64位?

可以执行命令:

[root@Centos7-4local download]# getconf LONG_BIT

64

1、下载go

https://www.golangtc.com/static/go/

wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz

 

2、配置环境

tar -xzf go1.9.2.linux-amd64.tar.gz -C /usr/local

vim /etc/profile

export GOPATH=/opt/go

export PATH=$PATH:/usr/local/go/bin

 

3、测试

[root@Centos7-4local download]# go version  //查看go的版本

go version go1.9.2 linux/amd64

[root@Centos7-4local download]# go env    //查看go环境

 

4、安装grpc框架

  1. git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
  2.  
    git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
  3.  
    git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
  4.  
    go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
  5.  
    git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
  6.  
    cd $GOPATH/src/
  7. git clone https://github.com/golang/sys.git $GOPATH/src/golang.org/x/sys

  8.  
    go install google.golang.org/grpc

 

gRPC模式

gRPC主要有4种请求/响应模式,分别是:

(1) 简单模式(Simple RPC)

这种模式最为传统,即客户端发起一次请求,服务端响应一个数据,这和大家平时熟悉的RPC没有什么大的区别,所以不再详细介绍。

(2) 服务端数据流模式(Server-side streaming RPC)

这种模式是客户端发起一次请求,服务端返回一段连续的数据流。典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。

(3) 客户端数据流模式(Client-side streaming RPC)

与服务端数据流模式相反,这次是客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。典型的例子是物联网终端向服务器报送数据。

(4) 双向数据流模式(Bidirectional streaming RPC)

顾名思义,这是客户端和服务端都可以向对方发送数据流,这个时候双方的数据可以同时互相发送,也就是可以实现实时交互。典型的例子是聊天机器人。

 

 

 

5、下载测试用例

grpc/grpc-go/examples/cpp/route_guide

git clone https://github.com/grpc/grpc-go.git

 

cd   grpc-go/examples/route_guide

$ go run client/client.go
$ go run server/server.go

 

7、案例

upstream grpcservers {

   server 192.168.20.21:50051;

   server 192.168.20.22:50052;

}

server {  

   listen 1443 ssl http2;   

   ssl_certificate   ssl/certificate.pem;   

   ssl_certificate_key ssl/key.pem;  

   location /helloworld.Greeter {     

       grpc_pass grpc://grpcservers;     

       error_page 502 = /error502grpc;  

  }   

   location = /error502grpc {     

       internal;    

       default_type application/grpc;     

       add_header grpc-status 14;     

       add_header grpc-message "unavailable";     

       return 204;

  }

}

internal
语法:internal 
默认值:no 
使用字段: location 
internal指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
“内部的”是指下列类型:
• 指令error_page重定向的请求。
• ngx_http_ssi_module模块中使用include virtual指令创建的某些子请求。
• ngx_http_rewrite_module模块中使用rewrite指令修改的请求。
一个防止错误页面被用户直接访问的例子:
error_page 404 /404.html;
location  /404.html {
internal;
}

HTTP协议版本与Nginx作为grpc代理网管实现

Pingbacks已打开。

引用地址

暂无评论

发表评论