为Django实现高并发

一。uWSGI

   uWSGI是一个Web服务器,它实现了WSGI协议、uwsgihttp等协议。NginxHttpUwsgiModule的作用是与uWSGI服务器进行交换。

  1. WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginxuWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

  2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

  3. uWSGI是实现了uwsgiWSGI两种协议的Web服务器。

  4. uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet4byte为传输信息类型描述,它与WSGI相比是两样东西。

   uWSGI的主要特点如下:

  1. 超快的性能

  2. 低内存占用

  3. app管理

  4. 详尽的日志功能

  5. 高度可定制(内存大小限制,服务一定次数后重启等)


    安装使用pip install uwsgi

为Django配置高并发的解决方案时,我们只需要在mangage.py的同级目录下新建一个uwsgi.ini文件,文件内容如下所示:

 

[uwsgi]
# Django-related settings
# the base directory (full path)
chdir           = /root/python/BlogProject/
# Django's wsgi file  #MyBlog 就是当前项目的名称,其余的不用改动
module          = MyBlog.wsgi:application
# the virtualenv (full path)
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 6
# the socket (use the full path to be safe
socket          = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true
socket-timeout  = 600

buffer-size     = 65535
daemonize       = /root/python/BlogProject/uwsgi/uwsgi.log


二。nginx


      nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地方,由于其底层使用 epoll 异步IO模型进行处理,使其深受欢迎

     安装:sudo apt install nginx

    

        我的ubuntu上安装的nginx的配置文件目录是/etc/nginx/nginx.conf

            vim /etc/nginx/nginx.conf

        将配置文件中的service字段修改成如下的格式。

server{

                listen 80;

                server_name your ip;

                location /{

                        uwsgi_pass 127.0.0.1:8000;

                        include uwsgi_params;

                }

                #location /{

                #       uwsgi_pass django;

                #       include  /etc/nginx/uwsgi_params;

                #}

            }

            

            server{

                listen 8080;

                server_name your ip:8080;

                location /{

                        uwsgi_pass 127.0.0.1:8081;

                        include uwsgi_params;

                }

              }

        这里如果一台服务器上写了起了两个service只需要写两个service就好,但是一定要注意端口不要出现重复。否则会出现端口占用的情况。

       解释:第一个server:监听80端口,80端口是外部浏览器访问的端口,而8000端口是与uwsgi通信的端口,同时从uwsgi我们可以看到,uwsgi中也设置了监听的端口为8000.表示uwsgi接收来自nginx的消息(通过8000)端口。

        项目文件的相对位置以及uwsgi的配置如图所示:

image.png







            
            

本博客源码Github地址:

https://github.com/zeus-y/

请随手给个star,谢谢!

打赏

评论