nginx+uWSGI+django+virtualenv+supervisor發佈web伺服器

来源:https://www.cnblogs.com/fengqiang626/archive/2019/11/10/11830971.html
-Advertisement-
Play Games

導論 WSGI是Web伺服器網關介面。它是一個規範,描述了Web伺服器如何與Web應用程式通信,以及Web應用程式如何鏈接在一起以處理一個請求,(接收請求,處理請求,響應請求) 基於wsgi運行的框架有bottle,DJango,Flask,用於解析動態HTTP請求 支持WSGI的伺服器 wsgir ...


  導論

WSGI是Web伺服器網關介面。它是一個規範,描述了Web伺服器如何與Web應用程式通信,以及Web應用程式如何鏈接在一起以處理一個請求,(接收請求,處理請求,響應請求)
基於wsgi運行的框架有bottle,DJango,Flask,用於解析動態HTTP請求
支持WSGI的伺服器
    wsgiref
        python自帶的web伺服器
    Gunicorn
        用於linux的 python wsgi Http伺服器,常用於各種django,flask結合部署伺服器。
    mode_wsgi
        實現了Apache與wsgi應用程式的結合
    uWSGI
        C語言開發,快速,自我修複,開發人員友好的WSGI伺服器,用於Python Web應用程式的專業部署和開發。

在部署python程式web應用程式時,可以根據性能的需求,選擇合適的wsgi server,不同的wsgi server區別在於併發支持上,有單線程,多進程,多線程,協程的區別,其功能還是近似,無非是請求路由,執行對應的函數,返回處理結果。




Django部署

Django的主要部署平臺是 WSGI,這是用於Web伺服器和應用程式的Python標準。

Django的 startproject管理命令設置一個簡單的預設WSGI配置,可以根據需要為您的項目進行調整,並指示任何符合WSGI的應用程式伺服器使用。

application 
使用WSGI部署的關鍵概念是應用程式伺服器用於與代碼通信的 application 可調用。它通常在伺服器可訪問的Python模塊中作為名為 application 的對象提供。

startproject 命令創建包含這樣的 application 可調用的文件 <project_name>/wsgi.py. ,它被Django的開發伺服器和生產WSGI部署使用。
WSGI伺服器從其配置中獲取 application 可調用的路徑。 Django的內置伺服器,即 runserver 命令,從 WSGI_APPLICATION 設置讀取它。

 

複製代碼
1 首先nginx 是對外的服務介面,外部瀏覽器通過url訪問nginx,

2nginx 接收到瀏覽器發送過來的http請求,將包進行解析,分析url,如果是靜態文件請求就直接訪問用戶給nginx配置的靜態文件目錄,直接返回用戶請求的靜態文件,

如果不是靜態文件,而是一個動態的請求,那麼nginx就將請求轉發給uwsgi,uwsgi 接收到請求之後將包進行處理,處理成wsgi可以接受的格式,併發給wsgi,wsgi 根據請求調用應用程式的某個文件,某個文件的某個函數,最後處理完將返回值再次交給wsgi,wsgi將返回值進行打包,打包成uwsgi能夠接收的格式,uwsgi接收wsgi 發送的請求,並轉發給nginx,nginx最終將返回值返回給瀏覽器。

3要知道第一級的nginx並不是必須的,uwsgi完全可以完成整個的和瀏覽器交互的流程,但是要考慮到某些情況

1 安全問題,程式不能直接被瀏覽器訪問到,而是通過nginx,nginx只開放某個介面,uwsgi本身是內網介面,這樣運維人員在nginx上加上安全性的限制,可以達到保護程式的作用。

2負載均衡問題,一個uwsgi很可能不夠用,即使開了多個work也是不行,畢竟一臺機器的cpu和記憶體都是有限的,有了nginx做代理,一個nginx可以代理多台uwsgi完成uwsgi的負載均衡。

3靜態文件問題,用django或是uwsgi這種東西來負責靜態文件的處理是很浪費的行為,而且他們本身對文件的處理也不如nginx好,所以整個靜態文件的處理都直接由nginx完成,靜態文件的訪問完全不去經過uwsgi以及其後面的東西。
複製代碼 為什麼要用nginx,uwsgi

 

複製代碼
1.單機啟動django項目,性能低,預設使用wsgiref模塊,性能低的wsgi協議

python3 manager.py runserver 0.0.0.0:8000   > wsgiref模塊中

2.高併發啟動django,django是沒有這個功能的,而uWSGI模塊,遵循uwsgi協議,支持多進程處理django請求

uwsgi  通過他,啟動你的django,而不再是python3 manager.py runserver 0.0.0.0:8000


3.公司中一般用 nginx + uwsgi + django + virtualenv  + supervisord(進程管理工具)


搭建筆記:
    1.確定依賴組件是否安裝
    yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
    
    

    
    
nginx 正向代理,反向代理的概念




用戶阿段,去訪問mycrm.com:80 ,他想直接從80埠,找到hello視圖,也就是mycrm.com:80/hello 
實現手段就是,阿段去訪問 mycrm.com:80 這個nginx服務,並且讓nginx,把hello這個請求,丟給後端的 uwsgi+django程式處理

1.基礎環境準備好
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

2.準備好python3環境

3.準備好virtualenv 

4.安裝uWSGI
    1.激活虛擬環境
    source /opt/all_venv/venv2/bin/activate
    
    2.安裝uWSGI
    (venv2) [root@s13linux ~ 05:18:21]$pip3 install uwsgi
    
    3.檢查uwsgi版本
        (venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
        2.0.17.1
        #檢查uwsgi python版本
        uwsgi --python-version
    
    4.運行一個簡單的uwsgi伺服器
        1.創建一個test.py文件,寫入內容
        def application(env, start_response):
            start_response('200 OK', [('Content-Type','text/html')])
            return [b"Hello World"] # python3
            
        2.然後用uwsgi命令啟動
        uwsgi --http :8000 --wsgi-file test.py
            參數解釋
            http :8000: 使用http協議,埠8000
            wsgi-file test.py: 載入指定的文件,test.py
        
    5.用uwsgi運行你的django項目(測試使用)
        1.準備好mysite,自己寫好MTV視圖函數  /hello 
    
    先確保你在項目文件夾下,例如/opt/mysite/底下
    
    uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
        參數解析
            --http 啟動在8088埠,--module 指定項目文件夾路徑  --py-autoreload是熱載入程式
    
    6.配置nginx反向代理uwsgi+django!!!!(此步重要!!!)
        1.首先kill殺掉nginx進程
        2.配置nginx.conf,通過此步才能生效!!
            填入重要兩個參數,根據自己目錄結構配置,uwsgi_pass通過這個參數,nginx才能轉發請求給後端0.0.0.0:9000的應用
            include  /opt/nginx112/conf/uwsgi_params;
            uwsgi_pass 0.0.0.0:9000;
        --------------------------分割線--------------------------------------------------------
             server {
                    listen       80;
                    server_name  mycrm.com;
                    location / {
                        include  /opt/nginx112/conf/uwsgi_params;
                        uwsgi_pass 0.0.0.0:9000;
                        root   html;
                        index  index.html index.htm;
                        #deny 10.0.0.1;
        }
        
        配置nginx.conf之後,啟動nginx服務,等待配置啟動uwsgi+django 
    
    7.配置supervisor進程管理工具
        1.通過python2的包管理工具easy_install安裝
        yum install python-setuptools
        easy_install supervisor
        
        2.通過命令生成supervisor的配支文件
        echo_supervisord_conf > /etc/supervisord.conf
        
        3.寫入/etc/supervisord.conf配置信息(參數根據自己環境填寫)
        [program:my_crm]
        command=/opt/all_venv/venv2/bin/uwsgi --uwsgi 0.0.0.0:9000 --chdir=/opt/s13crm --home=/opt/all_venv/venv2/ --module=s13crm.wsgi
        directory=/opt/s13crm
        startsecs=0
        stopwaitsecs=0
        autostart=true
        autorestart=true
    
    8.啟動supervi服務,(同時啟動uwsgi+django服務)
        最後啟動supervisor,完成uWSGI啟動django,nginx反向代理
        supervisord -c /etc/supervisord.conf #啟動supervisor
        supervisorctl -c /etxc/supervisord.conf restart my  #重啟my項目
        supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

    9.此時訪問網站mycrm.com ,查看是否可以通過80埠,訪問到django應用,完成項目發佈。
        由於nginx的高併發性能,配合uwsgi的多進程性能,可以達到一個線上的django應用發佈!!!
        
                                                                        謝謝大家!
    
內容博客地址:
https://www.cnblogs.com/pyyu/p/9481344.html
    
    
    
複製代碼 13期課程筆記

 

nginx官網

http://nginx.org/en/

nginx有關uwsgi模塊介紹

http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html

 

大家都學過了django,用django寫了各種功能,寫了bbs項目,寫了路飛學城。

咱們都知道django是一個web框架,方便我們快速開發web程式,http請求的動態數據就是由web框架來提供處理的。

前面超哥也對nginx簡單的介紹了,本文將nginx、WSGI、uwsgi、uWSGI、django這幾個關係梳理一下。

wsgi    全稱web server gateway interface,wsgi不是伺服器,也不是python模塊,只是一種協議,描述web server如何和web application通信的規則。
運行在wsgi上的web框架有bottle,flask,django
uwsgi    和wsgi一樣是通信協議,是uWSGI伺服器的單獨協議,用於定義傳輸信息的類型
uWSGI    是一個web伺服器,實現了WSGI協議,uwsgi協議。a
nginx    web伺服器,更加安全,更好的處理處理靜態資源,緩存功能,負載均衡,因此nginx的強勁性能,配合uWSGI伺服器會更加安全,性能有保障。
django 高級的python web框架,用於快速開發,解決web開發的大部分麻煩,程式員可以更專註業務邏輯,無須重新造輪子

邏輯圖

 

 

web伺服器

傳統的c/s架構,請求的過程是
客戶端 > 伺服器 
伺服器 > 客戶端
伺服器就是:1.接收請求 2.處理請求 3.返迴響應

web框架層

HTTP的動態數據交給web框架,例如django遵循MTV模式處理請求。
HTTp協議使用url定位資源,urls.py將路由請求交給views視圖處理,然後返回一個結果,完成一次請求。
web框架使用者只需要處理業務的邏輯即可。

如果將一次通信轉化為“對話”的過程

Nginx:hello wsgi,我剛收到一個請求,你準備下然後讓django來處理吧

WSGI:好的nginx,我馬上設置環境變數,然後把請求交給django

Django:謝謝WSGI,我處理完請求馬上給你響應結果

WSGI:好的,我在等著

Django:搞定啦,麻煩wsgi吧響應結果傳遞給nginx

WSGI:太棒了,nginx,響應結果請收好,已經按照要求傳遞給你了

nginx:好滴。我把響應交給用戶。合作愉快

Django Nginx+uwsgi 安裝配置

在前面的章節中我們使用 python manage.py runserver 來運行伺服器。這隻適用測試環境中使用。

正式發佈的服務,需要一個可以穩定而持續的伺服器。

基礎開發環境配置

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

提前安裝好python3環境

https://www.cnblogs.com/pyyu/p/7402145.html

virtualenv

請確保你的虛擬環境正常工作
https://www.cnblogs.com/pyyu/p/9015317.html

安裝django1.11

pip3 install django==1.11
#創建django項目mysite
django-admin startproject mysite
#創建app01
python3 manage.py startapp app01

mysite/settings.py

#settings.py設置
ALLOWED_HOSTS = ['*']
install app01

mysite/urls.py

from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello_django/', views.hello),
]

app01/views.py

from django.shortcuts import render,HttpResponse

# Create your views here.
def hello(request):
    print('request is :',request)
    return HttpResponse('django is ok ')

安裝uWSGI

進入虛擬環境venv,安裝uwsgi
(venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
檢查uwsgi版本
(venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
2.0.17.1
#檢查uwsgi python版本
uwsgi --python-version

運行簡單的uWSGI

#啟動一個python
uwsgi --http :8000 --wsgi-file test.py
  • http :8000: 使用http協議,埠8000
  • wsgi-file test.py: 載入指定的文件,test.py
#test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

uWsgi熱載入python程式

在啟動命令後面加上參數
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
#發佈命令
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#此時修改django代碼,uWSGI會自動載入django程式,頁面生效

運行django程式

#mysite/wsgi.py  確保找到這個文件
uwsgi --http :8000 --module mysite.wsgi
  • module mysite.wsgi: 載入指定的wsgi模塊

uwsgi配置文件

複製代碼
uwsgi支持ini、xml等多種配置方式,本文以 ini 為例, 在/etc/目錄下新建uwsgi_nginx.ini,添加如下配置:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /opt/mysite
# Django's wsgi file
module          = mysite.wsgi
# the virtualenv (full path)
home            = /opt/venv
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1
# the socket (use the full path to be safe
socket          = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
複製代碼 uwsgi.ini

指定配置文件啟動命令

uwsgi --ini  /etc/uwsgi_nginx.ini

配置nginx結合uWSGI

配置nginx.conf

worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
  #nginx反向代理uwsgi server { listen 80; server_name 192.168.11.64; location / {
     #nginx自帶ngx_http_uwsgi_module模塊,起到nginx和uwsgi交互作用
#通過uwsgi_pass設置伺服器地址和協議,講動態請求轉發給uwsgi處理 include /opt/nginx1-12/conf/uwsgi_params; uwsgi_pass 0.0.0.0:8000; root html; index index.html index.htm; }
     #nginx處理靜態頁面資源
     location /static{
        alias /opt/nginx1-12/static;   
}
     #nginx處理媒體資源
     location /media{
        alias /opt/nginx1-12/media;  
         }
error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置完啟動nginx

supervisor

supervisor 是基於 python 的任務管理工具,用來自動運行各種後臺任務,當然你也能直接利用 nohup 命令使任務自動後臺運行,但如果要重啟任務,每次都自己手動 kill 掉任務進程,這樣很繁瑣,而且一旦程式錯誤導致進程退出的話,系統也無法自動重載任務。

這裡超哥要配置基於virtualenv的supervisor

由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!

#註意此時已經退出虛擬環境了!!!!!
yum install python-setuptools
easy_install supervisor

通過命令生成supervisor的配支文件

echo_supervisord_conf > /etc/supervisord.conf

然後再/etc/supervisord.conf末尾添加上如下代碼!!!!!!

supervisord.conf配置文件參數解釋
[program:xx]是被管理的進程配置參數,xx是進程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程式啟動命令
autostart=true       ; 在supervisord啟動的時候也自動啟動
startsecs=10         ; 啟動10秒後沒有異常退出,就表示進程正常啟動了,預設為1秒
autorestart=true     ; 程式退出後自動重啟,可選值:[unexpected,true,false],預設為unexpected,表示進程意外殺死後才重啟
startretries=3       ; 啟動失敗自動重試次數,預設是3
user=tomcat          ; 用哪個用戶啟動進程,預設是root
priority=999         ; 進程啟動優先順序,預設999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,預設false
stdout_logfile_maxbytes=20MB  ; stdout 日誌文件大小,預設50MB
stdout_logfile_backups = 20   ; stdout 日誌文件備份數,預設是10
; stdout 日誌文件,需要註意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日誌文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;預設為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false     ;預設為false,向進程組發送kill信號,包括子進程

 

[program:my]
#command=/opt/venv/bin/uwsgi --ini  /etc/uwsgi_nginx.ini  #這裡是結合virtualenv的命令 和supervisor的精髓!!!!
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#--home指的是虛擬環境目錄 --module找到 mysite/wsgi.py

最後啟動supervisor,完成uWSGI啟動django,nginx反向代理

supervisord -c /etc/supervisord.conf #啟動supervisor
supervisorctl -c /etxc/supervisord.conf restart my #重啟my項目
supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

 重新載入supervisor

一、添加好配置文件後

二、更新新的配置到supervisord    

supervisorctl update
三、重新啟動配置中的所有程式

supervisorctl reload
四、啟動某個進程(program_name=你配置中寫的程式名稱)

supervisorctl start program_name
五、查看正在守候的進程

supervisorctl
六、停止某一進程 (program_name=你配置中寫的程式名稱)

pervisorctl stop program_name
七、重啟某一進程 (program_name=你配置中寫的程式名稱)

supervisorctl restart program_name
八、停止全部進程

supervisorctl stop all
註意:顯示用stop停止掉的進程,用reload或者update都不會自動重啟。

 django的靜態文件與nginx配置

mysite/settings.py

STATIC_ROOT='/opt/nginx1-12/static'
STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"static"),
]

上述的參數STATIC_ROOT用在哪?

通過python3 manage.py collectstatic 收集所有你使用的靜態文件保存到STATIC_ROOT!

STATIC_ROOT 文件夾 是用來將所有STATICFILES_DIRS中所有文件夾中的文件,以及各app中static中的文件都複製過來
# 把這些文件放到一起是為了用nginx等部署的時候更方便

 

參考文檔:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html

 uwsgi熱載入:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Management.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、簡介 在Random類用於創建隨機數。(當然是偽隨機的。) 二、Random用法 例: 三、方法詳細說明 Random 類中提供的 Next、NextBytes 以及 NextDouble 方法可以生成整數類型、byte 數組類型以及雙精度浮點型的隨機數,詳細說明如下表所示。 Next():每次 ...
  • ASP.NET Core基於策略的授權允許一種更加靈活的方式來創建授權規則 ...
  • 一、進入/etc/bash.bashrc(使用文本編輯器打開) 二、在最後面添加新的環境變數 export PATH=usr/...(路徑):$PATH 三、保存後,打開終端,輸入source ~/.bashrc 四、輸入echo $PATH,可以查看是否已成功添加 ...
  • 此書作者劉遄(Liu Chuán)從事於Linux運維技術行業,並且在2012年獲得紅帽工程師RHCE 6版本證書,在2015年初又分別獲得紅帽工程師RHCE 7版本證書與紅帽架構師認證RHCA頂級證書。 學習是件苦差事: 稻盛和夫先生在《活法》中有段一直激勵著我的話,現在轉送給正在閱讀本書的你: ...
  • 本文記錄一下 CMake 變數的定義、原理及其使用。CMake 變數包含 Normal Variables、Cache Variables。通過 set 指令可以設置兩種不同的變數。也可以在 CMake 腳本中使用和設置環境變數。set(ENV{ ...
  • 運算符兩邊都是volatile變數的警告,將IAR設置如下即可: ...
  • 這裡講的是多重嵌套。沒用過 EOF的朋友請參考其他基礎貼 在自動化運維中,常常需要shell腳本。在自動化創建腳本時,會遇到腳本內容里有用EOF重定向到配置文件的代碼。 這樣就不能用EOF來創建腳本了,所以要多方法混用來實現自動化。 重定向方法1: 重定向方法2:參考https://linux.di ...
  • 發佈CRM你將使用以下軟體 nginx uWSGI CentOS7 CRM項目文件 virtualenv supervisor WSGI、uWSGI python web伺服器開發使用WSGI協議(Web Server Gateway Interface) python web項目預設會生成一個ws ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...