利用nginx + fastcgi实现图片识别服务器

  


  

  

使用的特定的设备进行深度学习模型的推理,该机器仅仅提供了c++封装好的API进行模型的加载启动与推理,模型的训练依然是使用咖啡,模型需要转化成该设备支持的格式,模型的转化这里就不在介绍。为了把模型的推理做成一种服务,只能上手c++,搭建HTTP服务,使得用户通过HTTP服务的帖子一张图片,服务器启动模型推理,实现模型的预测,并把结果返回给客户端。
  

  

  

利用nginx + fastcgi实现图片识别服务器

  

服务短的服务内容就是对接收的图片进行预处理,然后进行模型的推理,目前需要做的一点就是引入HTTP服务

  


  

  

对于一个c++新手,前期调研当然是先进行搜索,http服务器c++搜处理的结果也是五花八门,有的是教你如何通过实现一个http服务器,有的是一个用第三方库,有的是直接怼一堆代码……知道在stackoverflow上看到了:

  

利用nginx + fastcgi实现图片识别服务器

为什么   

不试着NGINX fcgi-function映射# 63;
  

  


  

  

nginx这个是做代理的神器,做负载均衡的时候也经常用,只要我的客户端的内容发送的nginx上,然后nginx把数据转发给fcgi相关的应用就可以,我需要做的就是把fcgi和我的推理程序结合起来就可以。
  

  

<强> nginx
  

  

简单说nginx就是中间商,客户端把请求发给中间商,中间商去货源地把货拿上,让后给客户回应:

  

利用nginx + fastcgi实现图片识别服务器

  

客户告诉nginx我要购买* *商品,nginx就去对于的服务提供商取出对于服务并把它返回给客户。
  

  

目前需要的就是实现fcgi部分,那么什么是fcgi& # 63;

  

<强> cgi
  

  

通用网关接口(公共网关接口/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据. CGI描述了服务器和请求处理程序之间传输数据的一种标准。

  

利用nginx + fastcgi实现图片识别服务器

  

这里的标准输入输出是对应的一些环境变量主要包含有与请求相关的环境变量,与服务器相关的环境变量,与客户端相关的环境变量三大类。
  

  

<强> fastcgi
  

  

FastCGI实际上是增加了一些扩展功能的CGI,是CGI的改进,同样也是描述客户端和Web服务器程序之间传输数据的一种标准。
  

  

FastCGI致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的网站请求。与CGI为每个Web请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。
  

  

为什么说是减少了互动的开销呢?这就要看两种处理方式的区别!
  

  

cgi的工作流程:

  

利用nginx + fastcgi实现图片识别服务器

  

每当客户端发出一个新的请求,首先要创建一个cgi子进程,然后cgi处理完请求,有多少个连接就会有多少个cgi子进程启动,当请求量大的时候会占用大量的系统资源。
  

  

<强> fastcgi
  

  

fastcgi是使用持续的进程处理一连串的请求,这些进程有fastcgi的进程管理器来进行管理具体流程如下所示:

  

利用nginx + fastcgi实现图片识别服务器

  

也可以这样比喻:
  

  

cgi在卖鸡蛋灌饼,等到顾客要吃的时候,他开始点的火,打鸡蛋,摊饼,然后熄火。然后等待下一个顾客

  

利用nginx + fastcgi实现图片识别服务器

  

fastcgi就是早餐店老版,雇佣了一帮服务员,专门做需要现场做的饭,老板只需要把订单安排下去,服务员负责盛粥煎饼。

  

利用nginx + fastcgi实现图片识别服务器

利用nginx + fastcgi实现图片识别服务器