手把手教你從安裝CentOS7.4鏡像開始,搭建IoT視頻監控系統

来源:https://www.cnblogs.com/huaweiyun/archive/2022/10/28/16836198.html
-Advertisement-
Play Games

摘要:在CentOS7.4伺服器版本的環境下安裝nginx伺服器、配置文件伺服器、流媒體伺服器。 本文分享自華為雲社區《華為雲ECS伺服器安裝CentOS7.4鏡像,部署GINX伺服器、搭建物聯網視頻監控系統》,作者:DS小龍哥。 在CentOS7.4伺服器版本的環境下安裝nginx伺服器、配置文件 ...


摘要:在CentOS7.4伺服器版本的環境下安裝nginx伺服器、配置文件伺服器、流媒體伺服器。

本文分享自華為雲社區《華為雲ECS伺服器安裝CentOS7.4鏡像,部署GINX伺服器、搭建物聯網視頻監控系統》,作者:DS小龍哥。

在CentOS7.4伺服器版本的環境下安裝nginx伺服器、配置文件伺服器、流媒體伺服器。 (1)配置NGINX為HTTP伺服器,安裝rtmp模塊,完成rtmp視頻推流,支持緩存視頻到本地目錄、支持轉為HLS流,通過瀏覽器訪問直播流。 (2)部署開機自動啟動程式:方便設置自己的程式為開機啟動。

一、環境介紹

環境介紹: 採用的是華為雲的ECS彈性雲伺服器–鏡像安裝的CentOS7.4 64位 -----是伺服器版,非桌面版哦。
在CentOS7.4伺服器版本的環境下安裝nginx伺服器、配置文件伺服器、流媒體伺服器。

(1)配置NGINX為HTTP伺服器,安裝rtmp模塊,完成rtmp視頻推流,支持緩存視頻到本地目錄、支持轉為HLS流,通過瀏覽器訪問直播流。
(2)部署開機自動啟動程式:方便設置自己的程式為開機啟動。

二、Centos中安裝帶rtmp模塊的Nginx

2.1 新安裝的系統可以先安裝一些工具

yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc gcc-c++ 
yum install -y vim wget lsof git zip unzip

2.2 獲取Nginx二進位源碼

聽說srtmp模塊暫時只支持Nginx13-15版本,當前就在官網下載Nginx14

wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar xvf nginx-1.14.2.tar.gz 

2.3 獲取nginx-rtmp-module

wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.1.tar.gz
tar xvf v1.2.1.tar.gz

2.4 編譯nginx

cd nginx-1.14.2
./configure --add-module=../nginx-rtmp-module-1.2.1/ --with-http_ssl_module
make && make install
#建立軟鏈接
ln -s /usr/local/nginx/sbin/nginx /usr/bin

特別說明:

如果在配置時報錯,一般就是缺東西了,安裝了再配置。

比如:報錯 ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the mo ....
解決:
yum -y install pcre-devel
yum -y install openssl openssl-devel

2.5 修改Nginx的配置文件

打開/usr/local/nginx/conf/nginx.conf文件,在文件最後面加入下麵的配置。
rtmp {  
    server {  
 listen 8888;   
        application live {  
            live on;  
 }
         }  
}

上面8888是rtmp推流和拉流的埠。

修改nginx.conf之後,重啟nginx服務:

sudo service nginx restart

重啟服務之後,使用netstat -ltn命令查看TCP監聽的埠,確認下Nginx的監聽埠是否正常。
正常情況,一個是我們自己設置的rtmp服務監聽埠8888,還有一個80是Nginx預設的HTTP服務監聽埠。
接下來可以在瀏覽器里輸入本機IP地址:http://127.0.0.1/,查看Nginx服務開啟狀態。

2.6 設置開機啟動

wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults

2.7 控制nginx服務的3個命令: 啟動、停止、重啟

service nginx start
service nginx stop
service nginx restart  或者 nginx -s reload  (運行中生效配置文件)

2.8 進行rtmp推流

伺服器搭建好之後,推流和拉流的地址就是: rtmp://<伺服器IP地址>:8888/live/<推流存放的目錄>
例如: rtmp://127.0.0.1:8888/live/xl

2.9 nginx保存推流視頻文件

如果需要讓推流上來的文件保存下來後續進行查看歷史文件,可以配置nginx進行保存。

在原來的/usr/local/nginx/conf/nginx.conf配置文件里rtmp模塊中增加新的配置:

record all;
record_unique on;
record_path "./video";  #視頻緩存的路徑
record_suffix -%Y-%m-%d-%H_%M_%S.flv;

完整/usr/local/nginx/conf/nginx.conf里的rtmp模塊的配置如下:

#RTMP服務
rtmp {  
    server {  
 listen 8888;   
            application live {  
            live on;  #開啟實時
record all;
 record_unique on;
 record_path "./video";  #視頻緩存的路徑
 record_suffix -%Y-%m-%d-%H_%M_%S.flv;
 }
         }  
}

配置之後執行命令nginx -s reload重啟伺服器即可。

2.10 rtmp直播流轉為hls直播流

什麼是HLS直播流?

HLS 全稱是 HTTP Live Streaming,是一個由 Apple 公司提出的基於 HTTP 的媒體流傳輸協議,用於實時音視頻流的傳輸。目前HLS協議被廣泛的應用於視頻點播和直播領域。原理介紹
HLS 跟 DASH 協議的原理非常類似。通過將整條流切割成一個小的可以通過 HTTP 下載的媒體文件,然後提供一個配套的媒體列表文件,提供給客戶端,讓客戶端順序地拉取這些媒體文件播放,來實現看上去是在播放一條流的效果。由於傳輸層協議只需要標準的 HTTP 協議,HLS 可以方便的透過防火牆或者代理伺服器,而且可以很方便的利用 CDN 進行分發加速,並且客戶端實現起來也很方便。
HLS 把整個流分成一個個小的基於 HTTP 的文件來下載,每次只下載一些。HLS 協議由三部分組成:HTTP、M3U8、TS。這三部分中,HTTP 是傳輸協議,M3U8 是索引文件,TS 是音視頻的媒體信息。

HLS協議編碼格式要求:

視頻的編碼格式:H264
音頻的編碼格式:AAC、MP3、AC-3
視頻的封裝格式:ts
保存 ts 索引的 m3u8 文件

配置/usr/local/nginx/conf/nginx.conf將RTMP流轉為HLS流。

在http模塊的server配置里增加新的配置:

location /live_hls{
  types {
  #m3u8 type設置
  application/vnd.apple.mpegurl m3u8;
  #ts分片文件設置
  video/mp2t ts;
}
#指向訪問m3u8文件目錄
alias ./m3u8File; #和rtmp模塊里的hls_path設置路徑一樣
add_header Cache-Control no-cache; #禁止緩存
}

在rtmp模塊的server配置里增加新的配置:

hls on;   #開啟hls
hls_path ./m3u8File;  #hls的ts切片存放路徑 (這是個目錄,會自動創建的)
hls_fragment 2s; #本地切片長度
hls_playlist_length 6s;#HLS播放列表長度

/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:

worker_processes  1;   #Nginx進程數,建議設置為等於CPU總核數
events {
 worker_connections  1024;  #工作模式與連接數上限
}
rtmp_auto_push on;
#RTMP服務
rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  #開啟實時
record all;
 record_unique on;
 record_path "./video";  #視頻緩存的路徑
 record_suffix -%Y-%m-%d-%H_%M_%S.flv;

 hls on;   #開啟hls
 hls_path ./m3u8File;  #hls的ts切片存放路徑
 hls_fragment 2s; #本地切片長度
 hls_playlist_length 6s;#HLS播放列表長度
 }
         }  
}
#HTTP服務
http {
    include       mime.types;
 default_type  application/octet-stream;
 sendfile        on;
 keepalive_timeout  65;
    server {
        listen       8099;
 server_name  localhost;
        location / {
            root   html;
 index  index.html index.htm;
        }
        location /live_hls{
 types{
    #m3u8 type設置
application/vnd.apple.mpegurl m3u8;
#ts分片文件設置
video/mp2t ts;
}
#指向訪問m3u8文件目錄
alias ./m3u8File;
add_header Cache-Control no-cache; #禁止緩存
}
        location /control{
 rtmp_control all;
}

location /stat{
 rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl{
 root ./nginx-rtmp-module-master;
}
 # redirect server error pages to the static page /50x.html
 #
 error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置之後重啟伺服器即可。

按照前面的配置,RTMP推流地址和HTTP訪問地址如下:

RTMP推流和拉流地址: rtmp://127.0.0.1:8888/live/video01
那麼對應的HTTP的訪問地址:http://127.0.0.1:8099/live_hls/video01.m3u8

說明: 轉為HLS流之後,如果瀏覽器支持HLS流就可以直接輸入地址播放。一般手機瀏覽器都支持的。比如:蘋果手機的自帶瀏覽器,QQ瀏覽器等瀏覽器都支持直接播放HLS流。PC機的谷歌瀏覽器預設是不支持的。

2.11 NGINX配置HTTP文件伺服器

在5.8小節里介紹瞭如何配置NGINX保留RTMP推流的視頻文件,如果想做一個直播回放,歷史記錄查看的播放器,那麼就可以將rtmp視頻緩存的目錄作為HTTP文件伺服器訪問的根目錄,通過訪問這個根目錄獲取目錄下文件的索引,得到視頻文件的訪問地址就可以直接進行播放,就能做一個視頻回放播放器。

在http模塊里新增加一個server配置,並填入新的配置,詳細內容如下:

server {
 listen       8090;
 server_name  localhost;
 location / {
root ./video;  #指定哪個目錄作為Http文件伺服器的根目錄,如果你這裡寫了file就是你的根目錄,那麼訪問的時候file就不會出現在目錄中
autoindex on;   #設置允許列出整個目錄
autoindex_exact_size off; #預設為on,顯示出文件的確切大小,單位是bytes。改為off後,顯示出文件的大概大小,單位是kB或者MB或者GB
autoindex_localtime on; #預設為off,顯示的文件時間為GMT時間。改為on後,顯示的文件時間為文件的伺服器時間
charset utf-8; #防止文件亂碼顯示, 如果用utf-8還是亂碼,就改成gbk試試
        }
}

特別說明: nginx是支持配置多個server配置,監聽不同的埠,可以給文件伺服器單獨設置一個監聽埠,專門作為文件遍歷使用。

/usr/local/nginx/conf/nginx.conf文件的完整的配置如下:

worker_processes  1;   #Nginx進程數,建議設置為等於CPU總核數
events {
 worker_connections  1024;  #工作模式與連接數上限
}
rtmp_auto_push on;
#RTMP服務
rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  #開啟實時
record all;
 record_unique on;
 record_path "./video";  #視頻緩存的路徑
 record_suffix -%Y-%m-%d-%H_%M_%S.flv;

 hls on;   #開啟hls
 hls_path ./m3u8File;  #hls的ts切片存放路徑
 hls_fragment 2s; #本地切片長度
 hls_playlist_length 6s;#HLS播放列表長度
 }
         }  
}
#HTTP服務
http {
    include       mime.types;
 default_type  application/octet-stream;
 sendfile        on;
 keepalive_timeout  65;
server {
 listen       8090;
 server_name  localhost;
 location / {
root ./video;  #指定哪個目錄作為Http文件伺服器的根目錄,如果你這裡寫了file就是你的根目錄,那麼訪問的時候file就不會出現在目錄中
autoindex on;   #設置允許列出整個目錄
autoindex_exact_size off; #預設為on,顯示出文件的確切大小,單位是bytes。改為off後,顯示出文件的大概大小,單位是kB或者MB或者GB
autoindex_localtime on; #預設為off,顯示的文件時間為GMT時間。改為on後,顯示的文件時間為文件的伺服器時間
charset utf-8; #防止文件亂碼顯示, 如果用utf-8還是亂碼,就改成gbk試試
        }
}

    server {
        listen       8099;
 server_name  localhost;
        location / {
            root   html;
 index  index.html index.htm;
        }

        location /live_hls{
 types{
    #m3u8 type設置
application/vnd.apple.mpegurl m3u8;
#ts分片文件設置
video/mp2t ts;
}
#指向訪問m3u8文件目錄
alias ./m3u8File;
add_header Cache-Control no-cache; #禁止緩存
}
        location /control{
 rtmp_control all;
}

location /stat{
 rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl{
 root ./nginx-rtmp-module-master;
}
 # redirect server error pages to the static page /50x.html
 #
 error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

訪問文件測試: http://127.0.0.1:8090

三、Linux下開機啟動的執行流程

3.1 開機執行腳本順序

第一步:init /etc/inittab
第二步:啟動相應的腳本,並且打開終端
rc.sysinit
rc.d(裡面的腳本)
rc.local
第三步:啟動login登錄界面 login
第四步:在用戶登錄的時候執行sh腳本的順序,每次登錄的時候都會完全執行的
/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile

3.2 Linux中修改環境變數及生效方法

修改/etc/profile 或者 /etc/bashrc 可以讓環境變數全部用戶全局生效(需要重啟系統)。
修改~/.bash_profile 或~/.bashrc對當前用戶全局有效(需要重啟系統)。

如果需要立即生效,修改完之後用source命令執行,如:
source .bash_profile

3.3 rcX.d的啟動級別

一般有開機自啟動的需求時,一般會在/etc/rc.local文件中寫命令行或腳本執行命令的方式來實現。也可以在/etc/profile文件里實現(不建議)。

現在很多Linux發行版,預設是沒有/etc/rc.local這個文件或者沒有去執行,而使用的是/etc/rcX.d。

rcX.d並不是指這個目錄或者文件就是叫rcX.d,這其中的X對應是0~6這7個數字,不同的數字對應著不同的級別

查看當前系統/etc/rcX.d目錄:

[root@ecs-c687-ecrs work]# ls /etc/ | grep rc
bashrc
csh.cshrc
inputrc
mail.rc
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
vimrc
virc
wgetrc

通過runlevel命令查看當前系統的啟動級別:

我當前使用的是CentOS7.4伺服器版本,啟動級別如下:

[root@ecs-c687-ecrs ]# runlevel
N 3

查看/etc/rc3.d/目錄下文件的詳細信息:

[root@ecs-c687-ecrs ~]# ls /etc/rc3.d/ -l
total 0
lrwxrwxrwx. 1 root root 20 Feb 14 2022 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Feb 14 2022 K90network -> ../init.d/network
lrwxrwxrwx 1 root root 19 Sep 15 22:07 S12hostguard -> ../init.d/hostguard
lrwxrwxrwx 1 root root 24 Feb 14 2022 S50multi-queue-hw -> ../init.d/multi-queue-hw

可以看到該目錄下的文件都是鏈接文件,而且都是指向/etc/init.d中的shell腳本或者其他可執行文件,它們的命名方式基本都是以S或者K開頭,其後緊跟一個數字,數字後則是鏈接文件的名字,這個名字可以自行定義。

命名規則解釋如下:

以K90network為例:
K表示stop,S表示start。(表示需要傳入參數),也就是說開機自啟動命令會向腳本傳入start或者stop,在腳本里可以收到參數$1進行一些判斷,完成一些不同情況下的邏輯處理。比如:開機執行什麼代碼,關機執行什麼代碼。
90 表示腳本執行等級。(通常越小越優先)
network與/etc/init.d下的腳本文件名稱保持一致。

3.4 利用rcX.d實現開機自動執行腳本

比如:需求是開機之後創建一個文件,並向文件里存放一些數據。

(1)先在/etc/init.d目錄下創建一個up_demo.sh腳本,編寫腳本代碼:

#!/bin/bash
echo $0 $1 >> /home/up_test.txt

修改腳本許可權:

[root@ecs-c687-ecrs init.d]# chmod 777 /etc/init.d/up_demo.sh 
[root@ecs-c687-ecrs init.d]# ls up_demo.sh -l
-rwxrwxrwx 1 root root 76 Sep 16 14:13 up_demo.sh

(2) 在/etc/rc3.d目錄里,創建軟連接。 (因為我的系統啟動級別為3)

[root@ecs-c687-ecrs rc3.d]# ln -s /etc/init.d/up_demo.sh S10up_demo
[root@ecs-c687-ecrs rc3.d]# ls -l
total 0
lrwxrwxrwx. 1 root root 20 Feb 14 2022 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Feb 14 2022 K90network -> ../init.d/network
lrwxrwxrwx 1 root root 22 Sep 16 14:17 S10up_demo -> /etc/init.d/up_demo.sh
lrwxrwxrwx 1 root root 19 Sep 15 22:07 S12hostguard -> ../init.d/hostguard
lrwxrwxrwx 1 root root 24 Feb 14 2022 S50multi-queue-hw -> ../init.d/multi-queue-hw

(3)重啟系統,進入到/home目錄下查看文件內容,可以看到開機啟動成功,內容已經寫到up_test.txt文件里了。

 Welcome to Huawei Cloud Service
[root@ecs-c687-ecrs ~]# cd /home/
[root@ecs-c687-ecrs home]# ls
lib_run.sh  up_test.txt  video  work  work_pc  work.tar.gz
[root@ecs-c687-ecrs home]# cat up_test.txt 
/etc/rc.d/init.d/up_demo.sh start
[root@ecs-c687-ecrs home]# 

 

點擊關註,第一時間瞭解華為雲新鮮技術~


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

-Advertisement-
Play Games
更多相關文章
  • 1. 詳解explain分析SQL; 2. 索引失效的幾個場景; 3. SQL優化的幾個場景: 4. 大批量插入; 5. order by; 6. group by; 7. limit分頁; 8. insert操作; 9. 嵌套查詢; 10. or條件 ...
  • 一、前言 作為全鏈路數字化技術與服務提供商,袋鼠雲提供了從數據湖、大數據基礎平臺、離線開發、實時開發、數據服務、數據治理、指標管理、客戶數據洞察、數據孿生可視化等全產品體系的服務。 圍繞著“行業應用”及“通用應用”,袋鼠雲聚焦數智提供全維數字解決方案,幫助企業實現降本增效、快捷轉型,迄今為止袋鼠雲已 ...
  • uni-app預設使用uni-ui全端相容的、高性能UI框架,在我們開發過程中可以滿足大部分的需求了,並且如果是為了相容性,還是強烈建議使用uni-ui作為UI框架使用。 如果作為初創公司,自身又不想費太多精力去自己設計一套UI框架,那麼DCloud插件市場提供了很多優秀的UI框架,最重要的是有些U ...
  • 近年來,AR不斷發展,作為一種增強現實技術,給用戶帶來了虛擬和現實世界的融合體驗。但用戶已經不滿足於單純地將某件虛擬物品放在現實場景中來感受AR技術,更想用身體姿勢來觸發某個指令,達到更具真實感的人機交互功能。 比如在AR體感游戲中,用戶不必點擊按鍵進行頻繁操作,通過某個姿勢即可觸發;在拍攝短視頻時 ...
  • Promise 一種更優的非同步編程統一 方法,如果直接使用傳統的回調函數去完成複雜操作就會形成回調深淵 // 回調深淵 $.get('/url1'() => { $.get('/url2'() => { $.get('/url3'() => { $.get('/url4'() => { $.get( ...
  • 匹配輸入的字元:以字母或_開頭,後面由數字字母_組成長度為5-20的字元串 var reg=/^[a-bA-B_][a-bA-B0-9_]{4,19}/ var name1='abb' console.log(reg.test(name1) 題目描述:js求字元串位元組長度方法 描述:漢字位元組為2,其 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 從webview頁面傳值到uniapp中 官方文檔已經很詳細了,這裡給大家上我的實戰代碼,首先在webview頁面中引入相關依賴: <!-- uniapp各平臺依賴 --> <script type="text/javascript"> ...
  • 3D太陽能、三維光伏、三維儲能、使用three.js(webgl)搭建智慧樓宇、3D園區、3D廠房、3D倉庫、設備檢測、數字孿生、物聯網3D、物業3D監控、物業基礎設施可視化運維、3d建築,3d消防,消防演習模擬,3d庫房,webGL,threejs,3d機房,bim管理系統 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...