【驚雷】Linux下Nginx+(多)Tomcat的負載均衡的詳細與實現

来源:http://www.cnblogs.com/helonlihsmcn/archive/2017/12/11/8006673.html
-Advertisement-
Play Games

Linux下Nginx+(多)Tomcat的負載均衡的詳細與實現 一、簡介 【Nginx】 大名鼎鼎,麻雀雖小五臟俱全,它擁有小而穩且高效的特性。為目前大多數中小企業所使用。nginx可以做以下幾件事: 反向代理 負載均衡 動靜分離 網頁、圖片緩存 這裡長話短說了,它更加詳細的介紹親參考:https ...


Linux下Nginx+(多)Tomcat的負載均衡的詳細與實現

一、簡介

【Nginx】 大名鼎鼎,麻雀雖小五臟俱全,它擁有小而穩且高效的特性。為目前大多數中小企業所使用。nginx可以做以下幾件事:

  • 反向代理
  • 負載均衡
  • 動靜分離
  • 網頁、圖片緩存

這裡長話短說了,它更加詳細的介紹參考:https://baike.baidu.com/item/nginx/3817705?fr=aladdin

【Tomcat】 是一個免費開放源代碼的 Web 應用伺服器,具有開源免費、容易安裝、 容易使用、占用資源小、易於和其他軟體集成等優點。Tomcat 很受廣大程式員的喜歡,因為它運行時占用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統常用的功能;而且它還在不斷的改進和完善中,任何一個感興趣的程式員都可以更改它或在其中加入新的功能。

更長詳細解析請參考:http://www.baike.com/wiki/tomcat

【N+T的負載均衡】

然而他們的組合將是一把無與倫比的利刃。首先說明一下它的請求原理(路徑走向)

Nginx作為反向代理伺服器,實現負載均衡。首先瀏覽器發起請求,到達Nginx,由Nginx將請求地址轉發給相應的tomcat伺服器,再由tomcat伺服器將結果返回給Nginx,Nginx將結果再轉發給瀏覽器。

下麵上圖:

圖中的信息顯而易見,以nginx伺服器作為中轉分發請求,以達到負載均衡的目的。

二、環境需求

【由於博主的主機(臉紅~)配置低,所以只開一開虛擬機作為這次負載均衡的測試。一個ip三個埠既可實現上圖所述的效果了】

主機A:192.168.0.144/24

apache-tomcat-6.0.35.tar.gz   tomcat 6  使用的主要埠:18080
apache-tomcat-7.0.82.tar.gz   tomcat 7  使用的主要埠:28080
apache-tomcat-8.5.23.tar.gz   tomcat 8  使用的主要埠: 8088
nginx-1.0.12.tar.gz
jdk7u79linuxx64.tar.gz

(其他一些基礎環境比如gcc-c++的自己補全吧)

三、各個環境的搭建

3.1 Nginx搭建

先把所有準備好的軟體工具放到一個目錄下(都先準備好必用軟體,不然配置起來才去找軟體是很煩人的)

[root@N+T lhl]# ll
total 175172
-rw-r--r-- 1 root root   9472492 Dec  1  2017 apache-tomcat-8.5.23.tar.gz
-rw-r--r-- 1 root root 153512879 Dec  7  2017 jdk7u79linuxx64.tar.gz
-rw-r--r-- 1 root root    691002 May  9  2012 nginx-1.0.12.tar.gz
-rw-r--r-- 1 root root  15692490 Nov 29  2017 Tomcat6-7.zip

    接下來安裝一下開發環境

[root@N+T lhl]# yum -y install gcc gcc-c++

 

在/usr目錄下麵創建一個nginx的目錄,並把nginx包移動到該目錄下,再解壓到該目錄下麵

[root@N+T lhl]# mkdir -p /usr/nginx
[root@N+T lhl]# mv nginx-1.0.12.tar.gz /usr/nginx/ &&cd /usr/nginx/&&tar -zxvf nginx-1.0.12.tar.gz 

最好進入nginx-1.0.12目錄,再編譯安裝

[root@N+T nginx-1.0.12]# ./configure &&make &&make install

一般編譯安裝都預設在/usr/local/nginx/ 目錄下麵 ,下麵這個就是nginx的主程式。

[root@N+T sbin]# ll /usr/local/nginx/sbin/nginx 
-rwxr-xr-x 1 root root 954836 Aug 16 04:43 /usr/local/nginx/sbin/nginx

本博文為了搭建的方便直接把這個主程式拉倒/usr/bin/ 目錄下了

[root@N+T sbin]# cp -a /usr/local/nginx/sbin/nginx /usr/bin/

下麵是配置文件

[root@N+T sbin]# ll /usr/local/nginx/conf/nginx.conf

簡單的配置了一下配置文件

#####nginx+3 T 負載均衡測試############
#####最簡化的配置文件了--############### user nobody; #對於用戶有安全性限制的伙伴可以創建一個賬戶去使用 worker_processes
1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 60; #簡單文本顯示格式編輯 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 8 128k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path /dev/shm; server{ listen 80; server_name localhost; access_log /var/log/nginx/aeecss.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://li7105.com; proxy_redirect default; } } }

下麵運行nginx,查看信息

[root@N+T sbin]# /usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@N+T sbin]# ps -ef | grep nginx
root       1561      1  0 13:04 ?        00:00:00 nginx: master process /usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf
www        1562   1561  0 13:04 ?        00:00:00 nginx: worker process                             
root       1709   1573  0 18:49 pts/1    00:00:00 grep --color nginx

註意:nginx沒有啟動起來,麻煩去認真的檢查一下nginx配置文件。

PS:開機機動啟動的話,直接把啟動代碼丟進rc.local這個文件裡面即可。

[root@N+T lhl]# echo "/usr/bin/nginx  -c /usr/local/nginx/conf/nginx.conf"  >> /etc/rc.d/rc.local 

nginx的基本部署完成!

3.2 Tomcat 的搭建

由於tomcat依賴於jdk環境下運行,所以先搭建jdk環境,配置變數環境

[root@N+T lhl]# mkdir /usr/java/
[root@N+T lhl]# mv jdk7u79linuxx64.tar.gz /usr/java/ && cd /usr/java/ && tar -zxvf jdk7u79linuxx64.tar.gz
[root@N+T java]# ll
total 4
drwxr-xr-x 8 uucp 143 4096 Apr 11  2015 jdk1.7.0_79
[root@N+T java]# cd jdk1.7.0_79/
[root@N+T jdk1.7.0_79]# pwd  #看清楚路徑
/usr/java/jdk1.7.0_79
[root@N+T jdk1.7.0_79]# 

PS:關於軟體依賴的變數環境

就目前來去為一個軟體或者環境的運行去搭建變數環境主要用下麵三種方法

1、在/etc/profile下配置,這屬於大環境的配置了。不過管理上不靈活,屬於點到面的管理(本博文由於只有這個tomcat用到,所以在這配置了)

2、在/etc/profile.d/目錄下麵創建一個專屬的變數環境如:tomcat.sh  在裡面指的變數路徑以及文件路徑,這種方式管理很靈活,屬於點到點的管理。

3、在軟體的某個文本下麵去直接添加指定的變數環境,如tomcat的。

[root@N+T bin]# pwd
/usr/tomcatG/tomcat6/bin
[root@N+T bin]# ll
total 612
-rw-r--r-- 1 root root  22705 Nov 28  2011 bootstrap.jar
-rw-r--r-- 1 root root  11830 Nov 28  2011 catalina.bat
-rwxr-xr-x 1 root root  17708 Nov 28  2011 catalina.sh
-rw-r--r-- 1 root root   2374 Nov 28  2011 catalina-tasks.xml
-rw-r--r-- 1 root root  24172 Nov 28  2011 commons-daemon.jar
-rw-r--r-- 1 root root 199623 Nov 28  2011 commons-daemon-native.tar.gz
-rw-r--r-- 1 root root   1342 Nov 28  2011 cpappend.bat
-rw-r--r-- 1 root root   2108 Nov 28  2011 digest.bat
-rwxr-xr-x 1 root root   1689 Nov 28  2011 digest.sh
-rw-r--r-- 1 root root   3150 Nov 28  2011 setclasspath.bat
-rwxr-xr-x 1 root root   4153 Aug 16 10:57 setclasspath.sh ###在這個文件裡面指定變數環境
-rw-r--r-- 1 root root   2108 Nov 28  2011 shutdown.bat
-rwxr-xr-x 1 root root   1628 Nov 28  2011 shutdown.sh
-rw-r--r-- 1 root root   2109 Nov 28  2011 startup.bat
-rwxr-xr-x 1 root root   2023 Nov 28  2011 startup.sh
-rw-r--r-- 1 root root  32277 Nov 28  2011 tomcat-juli.jar
-rw-r--r-- 1 root root 249259 Nov 28  2011 tomcat-native.tar.gz
-rw-r--r-- 1 root root   3479 Nov 28  2011 tool-wrapper.bat
-rwxr-xr-x 1 root root   3472 Nov 28  2011 tool-wrapper.sh
-rw-r--r-- 1 root root   2113 Nov 28  2011 version.bat
-rwxr-xr-x 1 root root   1632 Nov 28  2011 version.sh
[root@N+T bin]# 

setclasspath.sh  裡面指定。軟體的不同在不同的文件指定吧,這個可以在度娘查到。第三種辦法一般很少用到。

繼續!下麵在/etc/profile下配置變數環境

export JAVA_HOME=/usr/java/jdk1.7.0_79/  #路徑別弄錯
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

最後直接執行,使得文件profile生效

[root@N+T /]# source /etc/profile

接著執行 java -version  命令即可看到對應的版本號,說明已經生效了。(在這裡有些小伙伴會時常出現一個問題,明明tomcat已經實在用這個

jdk版本了,可是輸入命令java -version 顯示出來的卻不是目前tomcat在用的jdk版本,這時候該註意一下查看tomcat下麵的comment目錄下的jdk版本是否對應的,不是的話。就把jdk下的替換過去,另外我還有尋找另外一種解決辦法,希望各位賜教。)

jdk部署完畢!

3.3 tomcat 的搭建

在/usr 下創建tomcatG 的目錄,並且把三個版本的tomcat拉到目錄下分別改名為tomcat6、tomcat7、tomcat8。最後分別解壓,再修改server.xml  文檔的埠

[root@N+T tomcatG]# ll
total 12
drwxr-xr-x 9 root root 4096 Aug 16 10:27 tomcat6
drwxr-xr-x 9 root root 4096 Aug 16 10:49 tomcat7
drwxr-xr-x 9 root root 4096 Aug 16 11:11 tomcat8
[root@N+T tomcatG]# 

下麵修改tomcat6的server.xml文件:三處地方

1、

<Connector port="18080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

2、

<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />

3、

<Server port="18005" shutdown="SHUTDOWN">

剩下的tomcat7和tomcat8以此類推!

下麵啟動tomcat6-8

啟動tomcat6:

[root@N+T bin]# pwd
/usr/tomcatG/tomcat6/bin
[root@N+T bin]# ll
total 612
-rw-r--r-- 1 root root  22705 Nov 28  2011 bootstrap.jar
-rw-r--r-- 1 root root  11830 Nov 28  2011 catalina.bat
-rwxr-xr-x 1 root root  17708 Nov 28  2011 catalina.sh
-rw-r--r-- 1 root root   2374 Nov 28  2011 catalina-tasks.xml
-rw-r--r-- 1 root root  24172 Nov 28  2011 commons-daemon.jar
-rw-r--r-- 1 root root 199623 Nov 28  2011 commons-daemon-native.tar.gz
-rw-r--r-- 1 root root   1342 Nov 28  2011 cpappend.bat
-rw-r--r-- 1 root root   2108 Nov 28  2011 digest.bat
-rwxr-xr-x 1 root root   1689 Nov 28  2011 digest.sh
-rw-r--r-- 1 root root   3150 Nov 28  2011 setclasspath.bat
-rwxr-xr-x 1 root root   4153 Aug 16 10:57 setclasspath.sh
-rw-r--r-- 1 root root   2108 Nov 28  2011 shutdown.bat
-rwxr-xr-x 1 root root   1628 Nov 28  2011 shutdown.sh  #這是停止
-rw-r--r-- 1 root root   2109 Nov 28  2011 startup.bat
-rwxr-xr-x 1 root root   2023 Nov 28  2011 startup.sh  #啟動
-rw-r--r-- 1 root root  32277 Nov 28  2011 tomcat-juli.jar
-rw-r--r-- 1 root root 249259 Nov 28  2011 tomcat-native.tar.gz
-rw-r--r-- 1 root root   3479 Nov 28  2011 tool-wrapper.bat
-rwxr-xr-x 1 root root   3472 Nov 28  2011 tool-wrapper.sh
-rw-r--r-- 1 root root   2113 Nov 28  2011 version.bat
-rwxr-xr-x 1 root root   1632 Nov 28  2011 version.sh
[root@N+T bin]# ./startup.sh 

如圖所示!

tomcat 7-8以此類推!

再看一下三個tomcat啟動的進程。

[root@N+T bin]# ps -ef |grep tomcat
root       1278      1  0 13:50 ?        00:00:10 /usr/java/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/tomcatG/tomcat7/endorsed -classpath /usr/tomcatG/tomcat7/bin/bootstrap.jar:/usr/tomcatG/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/tomcatG/tomcat7 -Dcatalina.home=/usr/tomcatG/tomcat7 -Djava.io.tmpdir=/usr/tomcatG/tomcat7/temp org.apache.catalina.startup.Bootstrap start start
root       1287      1  0 13:50 ?        00:00:13 /usr/java/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/tomcatG/tomcat8/bin/bootstrap.jar:/usr/tomcatG/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/usr/tomcatG/tomcat8 -Dcatalina.home=/usr/tomcatG/tomcat8 -Djava.io.tmpdir=/usr/tomcatG/tomcat8/temp org.apache.catalina.startup.Bootstrap start start
root       1301      1  0 13:50 ?        00:00:08 /usr/java/jdk1.7.0_79/jre/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat6//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/tomcatG/tomcat6//endorsed -classpath /usr/tomcatG/tomcat6//bin/bootstrap.jar -Dcatalina.base=/usr/tomcatG/tomcat6/ -Dcatalina.home=/usr/tomcatG/tomcat6/ -Djava.io.tmpdir=/usr/tomcatG/tomcat6//temp org.apache.catalina.startup.Bootstrap start
root       1509   1418  0 15:02 pts/0    00:00:00 grep --color tomcat
[root@N+T bin]# 

可以看到,各個埠以及運行的變數環境(jdk)這個排版比較長,需要往後面拉取才能看到所有內容。

3.4 配置負載均衡

在nginx裡面添加幾條代碼即可,下麵請看

#####nginx+3 T 負載均衡測試############
user nobody;
worker_processes 1;

events {
    use epoll;
    worker_connections  1024;
    }


http


{
    include       mime.types;
    default_type  application/octet-stream;


     sendfile        on;

     keepalive_timeout  60;
     fastcgi_connect_timeout 300;
     fastcgi_send_timeout 300;
     fastcgi_read_timeout 300;
     fastcgi_buffer_size 64k;
     fastcgi_buffers 8 128k;
     fastcgi_busy_buffers_size 128k;
     fastcgi_temp_file_write_size 128k;
     fastcgi_temp_path /dev/shm;

   upstream li7105.com {              #在此插入
   server 127.0.0.1:18080 weight=1;   #tomcat6分流    weight=1  這是權重分配。
   server 127.0.0.1:28080 weight=2;   #tomcat7分流    weight=2 顯然2更大,那麼它被分配任務的幾率也就更大
   server 127.0.0.1:8088 weight=2;    #tomcat8分流
           }



    server{

        listen       80;
        server_name  localhost;
        access_log /var/log/nginx/aeecss.log;
        error_log  /var/log/nginx/error.log;
        location / {
                proxy_pass  http://li7105.com;
                proxy_redirect default;
          }

        }
}

 【關於nginx的負載均衡的分配方式】

nginx關於這個負載均衡方面的權重分配方式有4種:

   1.輪詢,預設採取此方式,Nginx會按照請求時間的先後順序進行輪詢分發,若某台Web Server宕機,Nginx自動將其摘掉。

   2.weight,權重,即輪詢的幾率,值越大,被分發的可能性越大,用於後端伺服器性能不均的情況。

   3.ip_hash,每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決共用session的問題。

   4.自定義規則

 PS:     

  down 表示當前的Web Server暫時不參與負載 
  weight  預設為1.weight越大,負載的權重就越大。 
  backup: 其它所有的非backup Server down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。

四、負載均衡的測試

為了是的測試的效果明瞭些,我把/usr/tomcatG/tomcat6/webapps/ROOT 目錄下的index.jsp 文件的內容全部刪除掉,直接改為tomcat6 ,7-8一樣如此。

 

[root@N+T ROOT]# cat index.jsp 
I am Tomcat 6666666666666!

 

在測試之前需要檢查一下,下麵幾個個問題。確保沒問題了,就去測試,不然返回來做無用功了。

1、nginx、tomcat、jdk正在運行

2、網頁上能夠哦正常訪問nginx 和  tomcat

3、防火牆

我就在本地主機上面的瀏覽器測試吧,因為跟物理機是連通的。

在瀏覽器輸入:http://192.168.0.144/index.jsp  然後不停按F5刷新網頁,接著網頁會不停的在tomcat6、tomcat7、tomcat8的內容標識上面做跳轉,顯示的內容也會不一樣。

如圖:

 

 

不停的刷新,看著頁面的變化。你會發現權重等於1的tomcat6出現的次數會比tomcat7和tomcat8的次數很多的。

上面只是個簡單的測試,有興趣的伙伴可以添加去修改這個jsp文檔,哈哈。

上述圖片說明瞭nginx的負載均衡是正在運行中的了。測試完畢!

五、總結

 在搭建這個環境需要註意的幾點:

1、tomcat的埠,由於是在一臺機器上面部署3個tomcat,所以改的埠就有9個了。主機埠的範圍,超出範圍不然tomcat是無法啟動的

2、jdk變數環境的搭建,註意路徑。

3、nginx 配置文檔的參數、模塊註意編寫。不然無法啟動

4、註意防火牆設置,對於需求安全性的伙伴們。當然測試你可以完全的關閉掉。

 

nginx和tomcat的負載均衡,基本配置完畢,這類型的負載均衡目前在很多的企業被使用。然而這僅僅是企業網路架構中的一個小小的部分,我期待後面能夠給大家講述更多關於這方面的知識。

【上述博文,若有不當之處。還望各位不吝指出】


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

-Advertisement-
Play Games
更多相關文章
  • 匿名函數指函數定義體(即代碼塊)本身,使得函數成為所謂的“一等公民”,函數也可以像變數一樣進行賦值定義、傳遞和使用。本文還介紹了函數式編程的各種技巧,如嵌套、遞歸、高階、閉包等,站在函數式編程的頂峰,讓你感嘆“會當凌絕頂,一覽眾山小”! ...
  • Beats 平臺集合了多種單一用途數據採集器。這些採集器安裝後可用作輕量型代理,從成百上千或成千上萬台機器向 Logstash 或 Elasticsearch 發送數據。 一、架構圖 此次試驗基於前幾篇文章,需要先基於前幾篇文章搭建基礎環境。 二、安裝Filebeat 下載並安裝Filebeat 修 ...
  • 學習目標: 1:一但出發,必到達。 2:爭取在半年完成基礎學習。 3:出發目標8K,一到兩年爭取有18K-26K (會不會更高呢?) 學習制度: 五次不完成當日課程退課。 銘哥聯繫:QQ·微信·電話·不回覆黑名單。 班主任發消息:必須回覆表示收到。 必須有:課程筆記·有讓傻瓜都能看得懂的筆記。 課程 ...
  • 1.1 部署LNMP架構說明 1.1.1 LNMP架構內容 01.部署linux系統 02.部署nginx網站服務 03.部署mysql資料庫服務 04.部署php動態解析服務 1.1.2 配置LNMP架構步驟 01.配置Nginx配置文件 02.配置mysql資料庫信息(SQL語句) 03.配置w ...
  • Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日誌處理。 一、原理 Input 可以從文件中、存儲中、資料庫中抽取數據,Input有兩種選擇一個是交給Filter進行過濾、修剪。另一個是直接交給Output Filter 能夠動態地轉 ...
  • tomcat企業級Web應用伺服器配置與實戰 環境背景:公司業務經過長期發展,有了很大突破,已經實現盈利,現公司要求加強技術架構應用功能和安全性以及開始向企業應用、移動APP等領域延伸,此時原來開發web服務的php語言已經不適應新的場景,需要上java技術架構,現要求你根據公司需要,實現基於jav ...
  • 當內核或驅動出現僵死bug,導致系統無法正常運行,怎麼找到是哪個函數的位置導致的? 答,通過內核的系統時鐘,因為它是由定時器中斷產生的,每隔一定時間便會觸發一次,所以當CPU一直在某個進程中時,我們便在中斷函數中列印該進程的信息 1.先來回憶下 在之前的第5章內核中斷運行過程:http://www. ...
  • 在2017年9月5日深圳舉行的“‘名家芯思維’之2017年物聯網核心技術和應用國際研討會”上,周立功先生做了題為“平臺即服務”的講演。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...