C++ 网络编程项目fastDFS分布式文件系统(四)-fastCGI项目相关技术以及linux搜狗输入法相关问题。

目录

1. Nginx作为web服务器处理请求

2. http协议复习

      Get方式提交数据

Post方式提交数据

3. fastCGI  

3.1 CGI

 3.2 fastCGI

3.3 fastCGI和spawn-fcgi安装

        1. 安装fastCGI

    2. 安装spawn-fcgi

3.4 nginx && fastcgi    

4其他知识点

1. fastCGI环境变量 - fastcgi.conf

 2. 客户端使用Post提交数据常用方式

3. strtol 函数使用

4linux 搜狗输入法不能使用的的问题

问题

解决方法

5 共享库找不到的问题


1. Nginx作为web服务器处理请求

1. 静态请求

        客户端访问服务器的静态网页, 不涉及任何数据的处理, 如下面的URL:

http://localhsot/login.html
2. 动态请求
客户端会将数据提交给服务器

# 使用 get 方式提交数据得到的 url
http: //localhost/login?user=zhang3&passwd=123456&age=12&sex=man
        - http: 协议
        - localhost: 域名
        - /login: 服务器端要处理的指令
        - ? : 连接符 , 后边的内容是客户端给服务器提交的数据
        - & : 分隔符
动态的 url 如何找服务器端处理的指令 ?
        - 去掉协议
        - 去掉域名 /IP
        - 去掉端口
        - 去掉 ? 和它后边的内容
# 如果看到的是请求行 , 如何找处理指令 ?
        POST  /upload/UploadAction HTTP/1.1
        GET  /?username=tom&phone=123&email=hello%40qq.com&date=2018-01-
        01&sex=male&class=3&rule=on HTTP/1.1
1. 找请求行的第二部分
        - 如果是 post, 处理指令就是请求行的第二部分
        - 如果是 get, 处理指令就是请求行的第二部分 , ? 以前的内容

2. http协议复习

1. 请求消息 (Request) - 客户端 ( 浏览器 ) 发送给服务器的数据格式。
四部分 : 请求行 , 请求头 , 空行 , 请求数据
请求行 : 说明请求类型 , 要访问的资源 , 以及使用的 http 版本
请求头 : 说明服务器要使用的附加信息
空行 : 空行是必须要有的 , 即使没有请求数据
请求数据 : 也叫主体 , 可以添加任意的其他数据

      Get方式提交数据

第一行 : 请求行
2-9 : 请求头 ( 键值对 )
10 : 空行
get 方式提交数据 , 没有第四部分 , 提交的数据在请求行的第二部分 , 提交的数据会全部显示在地址栏中

GET /?username=tom&phone=123&email=hello%40qq.com&date=2018-01-
01&sex=male&class=3&rule=on HTTP/1.1
Host: 192.168.26.52:6789
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*
;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8

Post方式提交数据

第一行 : 请求行
2 -12 : 请求头 ( 键值对 )
13 : 空行
14 : 提交的数据

POST / HTTP/1.1
Host: 192.168.26.52:6789
Connection: keep-alive
Content-Length: 84
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*
;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8
username=tom&phone=123&email=hello%40qq.com&date=2018-01-
01&sex=male&class=3&rule=on
2. 响应消息 (Response) -> 服务器给客户端发送的数据
四部分 : 状态行 , 消息报头 , 空行 , 响应正文
状态行 : 包括 http 协议版本号 , 状态码 , 状态信息
消息报头 : 说明客户端要使用的一些附加信息
空行 : 空行是必须要有的
响应正文 : 服务器返回给客户端的文本信息
第一行 : 状态行
2 -11 : 响应头 ( 消息报头 )
12 : 空行
13-18 : 服务器给客户端回复的数据
HTTP/1.1 200 Ok
Server: micro_httpd
Date: Fri, 18 Jul 2014 14:34:26 GMT
/* 告诉浏览器发送的数据是什么类型 */
Content-Type: text/plain; charset=iso-8859-1 ( 必选项 )
/* 发送的数据的长度 */
Content-Length: 32
Location: url
Content-Language: zh-CN
Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT
Connection: close
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}

 3. http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别 :
1xx :指示信息 -- 表示请求已接收,继续处理
2xx :成功 -- 表示请求已被成功接收、理解、接受
3xx :重定向 -- 要完成请求必须进行更进一步的操作
4xx :客户端错误 -- 请求有语法错误或请求无法实现
5xx :服务器端错误 -- 服务器未能实现合法的请求

3. fastCGI  

3.1 CGI

通用网关接口 C ommon G ateway I nterface/ CGI 描述了客户端和服务器程序之间传输数据的一种标准 ,可以 让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI 独立于任何语言的, CGI 程序可以用 任何 脚本语言 或者是完全独立 编程语言 实现,只要这个语言可以在这个系统上运行。

 服务器可以解析出来数据,但是不能处理里面的数据的内容。

http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man
1. 用户通过浏览器访问服务器 , 发送了一个请求 , 请求的 url 如上

2. 服务器接收数据 , 对接收的数据进行解析
3. nginx 对于一些登录数据不知道如何处理 , nginx 将数据发送给了 cgi 程序。
        服务器端会创建一个cgi进程
4. CGI 进程执行
        加载配置, 如果有需求加载配置文件获取数据
        连接其他服务器: 比如数据库,验证数据
        逻辑处理:
        得到结果, 将结果发送给服务器
        退出
5. 服务器将 cgi 处理结果发送给客户端
在服务器端 CGI 进程会被频繁的创建销毁
        服务器开销大, 效率低

 CGI 链接其他服务器的过程。

 3.2 fastCGI

      

快速通用网关接口(Fast Common Gateway Interface/ FastCGI )是 通用网关接口 (CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准。 FastCGI 致力于减少 Web 服务器 CGI 程式 之间互动的开销,从而使 服务器 可以同时处理更多的 Web 请求 。与为每个请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的请求。这些进程由FastCGI 进程管理器管理,而不是 web 服务器。

fastCGICGI的区别:

        

CGI 就是所谓的短生存期应用程序, FastCGI 就是所谓的长生存期应用程序。 FastCGI 像是一个常驻 (long-live) 型的CGI,它可以一直执行着,不会每次都要花费时间去 fork 一次

 

 http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man

        

1. 用户通过浏览器访问服务器 , 发送了一个请求 , 请求的 url 如上
2. 服务器接收数据 , 对接收的数据进行解析
3. nginx 对于一些登录数据不知道如何处理 , nginx 将数据发送给了 fastcgi 程序
        通过本地套接字
        网络通信的方式
4. fastCGI 程序如何启动
        不是有web 服务器直接启动
        通过一个fastCGI 进程管理器启动
5. fastcgi 启动
        加载配置 - 可选
        连接服务器 - 数据库
        循环
        服务器有请求 -> 处理
        将处理结果发送给服务器
        本地套接字
        网络通信
        没有请求 -> 阻塞
6. 服务器将 fastCGI 的处理结果发送给客户端
        

3.3 fastCGIspawn-fcgi安装

        1. 安装fastCGI

        

./configure
 make
- fcgio.cpp:50:14: error: 'EOF' was not declared in this scope
- 没有包含对应的头文件 :
- stdio.h - c
- cstdio - > c ++
找到

 最开始地方包含头文件,就可以完成了。

make 之后已经生成了动态库了,但是在本地的隐藏文件下面,所以需要执行makefile 将这些文件库拷贝对应的库文件下面就可以了。

sudo make install  ##将对应的动态库拷贝到对应的系统目录下面去。

    2. 安装spawn-fcgi

(fastcgi的进程管理器)

同上。

下载地址 : http://redmine.lighttpd.net/projects/spawn-fcgi/wiki
安装
./configure
make
sudo make install

3.4 nginx && fastcgi    

nginx 不能像 apache 那样直接执行外部可执行程序,但 nginx 可以作为代理服务器,将请求转发给后端服务器,这也是nginx 的主要作用之一。其中 nginx 就支持 FastCGI 代理,接收客户端的请求,然后将请求转发给后端 fastcgi进程。下面介绍如何使用C/C++ 编写 cgi/fastcgi ,并部署到 nginx 中。通过前面的介绍知道,fastcgi 进程由 FastCGI 进程管理器管理,而不是 nginx 。这样就需要一个 FastCGI 管理,管理我们编写fastcgi 程序。我们使用 spawn-fcgi 作为 FastCGI 进程管理器。 spawn-fcgi是一个通用的 FastCGI 进程管理器,简单小巧,原先是属于 lighttpd 的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目了。spawn-fcgi 使用 pre-fork 模型, 功能主要是打开监听端口,绑定地址,然 后fork-and-exec 创建我们编写的 fastcgi 应用程序进程,退出完成工作 fastcgi 应用程序初始化,然后进入死循环侦听socket 的连接请求。

 http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man

1. 客户端访问 , 发送请求
2. nginx web 服务器 , 无法处理用户提交的数据
3. spawn-fcgi - 通信过程中的服务器角色
        被动接收数据
        在spawn-fcgi 启动的时候给其绑定 IP 和端口
4. fastCGI 程序
        程序猿写的 -> login.c -> 可执行程序 ( login )
        使用 spawn-fcgi 进程管理器启动 login 程序 , 得到一进程

1. nginx的数据转发 - 需要修改nginx的配置文件 nginx.conf

通过请求的 url http ://localhost/ login?user = zhang3&passwd = 123456&age = 12&sex = man 转换为一个 指令 :
        - 去掉协议
        - 去掉域名 / IP + 端口
        - 如果尾部有文件名 去掉
        - 去掉 ? + 后边的字符串
        - 剩下的就是服务器要处理的指令 : / login
location / login
{
        # 转发这个数据 , fastCGI 进程
        fastcgi_pass 地址信息 : 端口 ;
        #fastcgi_pass  localhost:8888
        # fastcgi.conf 和 nginx.conf 在同一级目录 : /usr/local/nginx/conf
        # 这个文件中定义了一些 http 通信的时候用到环境变量 , nginx 赋值的
        include fastcgi.conf;
}
地址信息 :
        - localhost
        - 127.0.0. 1
        - 192.168.1. 100
端口 : 找一个空闲的没有被占用的端口即可

         2. spawn-fcgi如何启动

# 前提条件 : 程序猿的 fastCGI 程序已经编写完毕 -> 可执行文件 login
        spawn-fcgi -a IP 地址 -p 端口 -f fastcgi 可执行程序
        - IP 地址 : 应该和 nginx fastcgi_pass 配置项对应
        - nginx: localhost - > IP: 127 .0.0.1
        - nginx: 127 .0.0.1 - > IP: 127 .0.0.1
        - nginx: 192 .168.91.130  - > IP: 192 .168.91.130
        - 端口 :8888
应该和 nginx fastcgi_pass 中的端口一致

将标准输入和输出使用dup2()重定向到fastcgi 的读缓冲区和写缓冲区里面。

 3. fastCGI程序怎么写

        

// http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man
// 要包含的头文件
#include "fcgi_config.h" // 可选
#include "fcgi_stdio.h" // 必须的 , 编译的时候找不到这个头文件 , find->path , gcc -I (指定头文件的路径即可)
// 编写代码的流程
int main ()
{
        // FCGI_Accept()是一个阻塞函数 , nginx fastcgi 程序发送数据的时候解除阻塞,
while ( FCGI_Accept () >= 0 )
{
        // 1. 接收数据
        // 1.1 get方式提交数据 - 数据在请求行的第二部分
        //得到的结果是: user=zhang3&passwd=123456&age=12&sex=man
        char * text = getenv ( "QUERY_STRING" );
        // 1.2 post方式提交数据 --
        char * contentLength = getenv ( "CONTENT_LENGTH" );//获取数据的长度。
        // 根据长度大小判断是否需要循环
        // 2. 按照业务流程进行处理(注册,登录,上传文件进行处理等等)
        // 3. 将处理结果发送给 nginx
        // 数据回发的时候 , 需要告诉 nginx 处理结果的格式 - 假设是 html 格式
        //Content_type 需要指定。
        printf ( "Content-type: text/html\r\n" );//必须要加的。
        printf ( "<html> 处理结果 </html>" );
        }
}

 

 

复习
Nginx
1. 是什么 ?
        开源的框架
        库: 一套 API
                框架: (可以 ) 有一套 API, 有一套事件处理机制
2. 能干什么 ?
        web服务器
        http协议
        反向代理
        实现web 服务器的负载均衡
        邮件服务器
        pop3
3. 怎么干事儿 ?
        web服务器
                
# 部署静态网页
1. 制作出来 , 并且部署到对应的资源目录中
2. 根据客户端的请求 , 在服务器端添加对应的 location 处理指令 - nginx. conf
3. 重新加载 nginx . conf 配置文件
客户端请求的 url : http ://xxxx.com/hello/login. html
- 去掉协议 : http
- 去掉域名 /IP:
- 去掉端口
- 去掉尾部的文件名
      反向代理服务器
                  
1. 找到反向代理服务器 的配置文件 : nginx. conf
2. 找模块 http - > server
server {
listen : 80; # 客户端访问反向代理服务器的时候使用的端口
server_name : localhost; # 域名 , 客户端访问反向代理服务器时候 , 使用的地址
# 配置如何转发 , 根据客户端的请求的 url 找到对应的转发指令
location /
{
# 设置转发地址
proxy_pass http ://test.com;
}
location / login
{
# 设置转发地址
proxy_pass http ://test.com;
}
}
# 设置代理
upstream test. com
{
# web 服务器的地址信息
server 192.168.1.100:80;
server 192.168.1.101:80;
}
# 192.168.1.100 web 服务器
http - > server
server {
location /
{
# 设置转发地址
root xxx;
}
location / login
{
# 设置转发地址
xxxx;
}
}
# 192.168.1.101 web 服务器
        http - > server
server {
location /
{
        # 设置转发地址
        root xxx;
}
location / login
{
        # 设置转发地址
        xxxx;
}
}

4其他知识点

1. fastCGI环境变量 - fastcgi.conf

 2. 客户端使用Post提交数据常用方式

Http 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。 开发者完全可以自己决定消息主体的格式数据发送出去,还要服务端解析成功才有意义, 服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。

 常用的四种方式

        application/x-www-form-urlencoded

# 请求行
POST http: //www.example.com HTTP/1.1
# 请求头
Content-Type: application/x-www-form-urlencoded;charset=utf-8
# 空行
# 请求数据 ( 向服务器提交的数据 )
title=test&user=kevin&passwd=32222

 application/json

POST / HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title": "test","sub":[1,2,3]}

 text/xml

POST / HTTP/1.1
Content-Type: text/xml
<?xml version="1.0" encoding="utf8"?>
<methodcall>
<methodname color="red">examples.getStateName</methodname>
<params>
<value><i4>41</i4></value>
</params>
</methodcall>
<font color="red">nihao, shijie</font>

multipart/form-data

        

POST / HTTP/1.1
Content-Type: multipart/form-data
# 发送的数据
------WebKitFormBoundaryPpL3BfPQ4cHShsBz \r\n
Content-Disposition: form-data; name="file"; filename="qw.png"
Content-Type: image/png\r\n; md5="xxxxxxxxxx"
\r\n
............. 文件内容 ................
............. 文件内容 ................
------WebKitFormBoundaryPpL3BfPQ4cHShsBz--
Content-Disposition: form-data; name="file"; filename="qw.png"
Content-Type: image/png\r\n; md5="xxxxxxxxxx"
\r\n
............. 文件内容 ................
............. 文件内容 ................
------WebKitFormBoundaryPpL3BfPQ4cHShsBz--

3. strtol 函数使用

// 将数字类型的字符串 -> 整形数
long int strtol ( const char * nptr , char ** endptr , int base );
        - 参数 nptr : 要转换的字符串 - 数字类型的字符串 : "123" , "0x12" , "0776"//0 开头是8进制,其余是16进制。
        - 参数 endptr : 测试时候使用 , 一般指定为 NULL
        - 参数 base : 进制的指定
        - 10 , nptr = "123456" , 如果是 "0x12" 就会出错
        - 8 , nptr = "0345"
        - 16 , nptr = "0x1ff"
        char* p = "123abc" ;
        char* pt = NULL ;
strtol ( p , & pt , 10 );
        - 打印 pt 的值 : "abc"
//fread(buf,1,stdin);

http://tool.oschina.net/

4linux 搜狗输入法不能使用的的问题

问题

(1)Ubuntu下,搜狗拼音输入法能启动(系统托盘处有图标),但是打不出汉字,打字时选框不正常。
或者
(2)Deepin下,搜狗输入法无法启动,托盘处不显示图标,fcitx运行正常(这个可以通过命令行启动fcitx来验证)。

解决方法

删除搜狗拼音输入法的配置文件,并重启输入法。
执行如下指令

cd ~/.config
find . -name sogou*
find . -name Sogou*

将两次搜索到的配置文件删除即可。
如果是单独文件,使用rm [文件名]指令,如果是目录,使用rm -R [目录名]指令。

备注
重启fcitx几次,有可能恢复(只能说有可能)。如果不愿意删除配置文件,可以重启fcitx几次试试。

fcitx restart &

或者在系统托盘的fcitx菜单中点击“重新启动(restart)”。

5 共享库找不到的问题

一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:

error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.

另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.

所以安装共享库后要注意共享库路径设置问题, 如下:

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,  但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH   

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

ldd命令可查看执行文件所引用到的动态库情况 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/100058.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动验证码-elementui实现

使用elementui框架实现 html代码 <div class"button-center"><el-popoverplacement"top":width"imgWidth"title"安全验证"trigger"manual"v-model"popoverVisible"hide"popoverHide"show&quo…

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主…

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有&#xff1a;FairyGUI&#xff0c;VSCode 代码环境涉及到了&#xff1a;Lua VSCode插件&#xff1a;EmmyLua 在编写FairyGUI编辑器菜单前&#xff0c;了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能…

面试-快速学习计算机网络-UDP/TCP

1. OSI四层和七层映射 区别&#xff1a; 应用层&#xff0c;表示层&#xff0c;会话层合并为了应用层数据链路层和物理层合并为了网络接口层 2. TCP和UDP的区别&#xff1f; 总结&#xff1a; 1 . TCP 向上层提供面向连接的可靠服务 &#xff0c;UDP 向上层提供无连接不可靠服…

Lnton羚通算法算力云平台在环境配置中Windows10终端和VSCode下如何打开Anaconda-Prompt

在Windows 10的终端和VSCode中&#xff0c;可以直接打开Anaconda Prompt。下面是两种方法&#xff1a; Windows 10终端&#xff1a;在开始菜单中搜索"Anaconda Prompt"&#xff0c;然后点击打开。这将启动Anaconda Prompt终端&#xff0c;你可以在其中执行conda相关命…

2337. 移动片段得到字符串

题目描述&#xff1a; 给你两个字符串 start 和 target &#xff0c;长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成&#xff0c;其中&#xff1a; 字符 ‘L’ 和 ‘R’ 表示片段&#xff0c;其中片段 ‘L’ 只有在其左侧直接存在一个 空位 时才能向 左 移动&a…

通过Matlab编程分析微分方程、SS模型、TF模型、ZPK模型的关系

微分方程、SS模型、TF模型、ZPK模型的关系 一、Matlab编程 微分方程、SS模型、TF模型、ZPK模型的关系二、对系统输出进行微分计算三、对系统输出进行积分计算四、总结五、系统的零点与极点的物理意义参考 &#xff1a;[https://www.zhihu.com/question/22031360/answer/3073452…

SpringCloud Gateway服务网关的介绍与使用

目录 1、网关介绍2、SpringCloudGateway工作原理3、三大组件3.1 、Route&#xff08;路由&#xff09;3.2、断言 Predicate3.3、过滤器 filter 4、Gateway整合nacos的使用4.1 、引入依赖4.2、 编写基础类和启动类4.3、 编写基础配置和路由规则4.4 、测试结果 1、网关介绍 客户…

ubuntu 20.04 安装 高版本cuda 11.7 和 cudnn最新版

一、安装显卡驱动 参考另一篇文章&#xff1a;Ubuntu20.04安装Nvidia显卡驱动教程_ytusdc的博客-CSDN博客 二、安装CUDA 英伟达官网&#xff08;最新版&#xff09;&#xff1a;CUDA Toolkit 12.2 Update 1 Downloads | NVIDIA Developer CUDA历史版本下载地址&#xff1a;C…

基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…

统一git使用方法,git状态变迁图,git commit提交规范

目录 说明 统一git使用方法 git状态变迁图 git commit 提交规范 说明 多次工作中多名员工不懂git多次技术分享&#xff0c;自行查资料学习git并使用&#xff0c;会出现使用各种偏僻的命令&#xff0c;异常问题无法解决&#xff1b;或出现带url的git合并提交。主要是学的不…

EasyPOI 实战总结

EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…

2022年06月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;制作蛋糕 小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉&#xff0c;250个单位的面粉&#xff0c;75个单位的糖&#xff0c;100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉&#xff0c;200个单位的面粉&#xff0c;150个单…

Docker的数据管理及端口映射与容器互联(使用centos镜像)

目录 Docker数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 Docker端口映射 Docker容器互联 Docker数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&…

蓝凌OA custom.jsp 任意文件读取

​曾子曰&#xff1a;“慎终追远&#xff0c;民德归厚矣。” 漏洞复现 访问漏洞url&#xff1a; 出现漏洞的文件为 custom.jsp&#xff0c;构造payload&#xff1a; /sys/ui/extend/varkind/custom.jsp var{"body":{"file":"file:///etc/passwd&q…

vue2+element-ui+springboot编写一个简单的CRUD和上传页面

1.0先看效果图 2.0主功能页面展示 3.0新增功能 4.0更新功能 5.0接口错误提示 前端码云链接:https://gitee.com/xiaojianr/management/tree/master/ 前端拷贝完成需要使用:npm install 命令完成package.json依赖的下载 后端码云链接:https://gitee.com/xiaojianr/manage

ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks使用分析

ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks使用分析 1 ATF的下载链接2 ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks处理流程2.1 ATF BL1/BL2 ufs_read_blocks2.2 ATF BL1/BL2 ufs_write_blocks 3 UFS System Model4 ufs_read_blocks/ufs_write_blocks详细分析4.1 ufs_re…

Blend for Visual Studio:提升用户界面设计的专业工具

随着软件行业的迅速发展&#xff0c;用户界面设计变得越来越重要。一个好的用户界面能够吸引用户的注意力&#xff0c;提供良好的用户体验&#xff0c;并增加应用程序的成功率。在这个背景下&#xff0c;Blend for Visual Studio作为一款专业的用户界面设计工具&#xff0c;为开…

基于PaddleOCR2.7.0发布WebRest服务测试案例

基于PaddleOCR2.7.0发布WebRest服务测试案例 #WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. #警告&#xff1a;这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。 输出结果…

AUTOSAR规范与ECU软件开发(实践篇)5.1 ETAS ISOLAR-A工具简介

前言 如前所述, 开发者可以先在系统级设计工具ISOLAR-A中设计软件组件框架, 包括端口接口、 端口等, 即创建各软件组件arxml描述性文件; 再将这些软件组件描述性文件导入到行为建模工具, 如Matlab/Simulink中完成内部行为建模。 亦可以先在行为建模工具中完成逻辑建模, 再…