這篇文章給大家分享的是Spring MVC程式碼實踐之網站架構及演變,內容挺不錯的,希望可以幫助到有需要的朋友
網站架構及其演進過程
網路傳輸分解方式:
標準的OSI 參考模型
TCP/IP 參考模型
#快取與頁面靜態化
快取
頁面靜態化
資料庫最佳化
##表結構優化
#SQL 語句最佳化
分區
分錶
索引最佳化
################ #####使用預存程序取代直接操作程序
#分離活躍資料
#批次讀取與延遲修改
##讀寫分離
#NoSQL 和Hadoop
高並發的解決方案
#應用程式和靜態資源的分離:靜態檔案(圖片、影片、JS、CSS等)放在專門的伺服器上
頁面快取(Nginx 伺服器、Squid 伺服器)
叢集與分散式
反向代理
TCP 在傳輸之前會進行三次溝通,稱 “三次握手”,傳完數據斷開的時候要進行四次溝通,稱 “四次揮手”。
TCP 兩個序號,三個標誌位意義:
#seq:表示所傳資料的序號。 TCP 傳輸時每個位元組都有一個序號,發送資料的時候會將資料的第一個序號傳送給對方,接收方會按序號檢查是否接收完整了,如果沒接收完整就需要重新傳送,這樣就可以保證資料的完整性。
ack:表示確認號碼。接收端用它來給發送端回饋已經成功接收到的資料訊息,它的值為希望接收的下一個資料包起始序號。
ACK:確認位,只有 ACK = 1 的時候 ack 才會運作。正常通訊時 ACK 為 1,第一次發起請求時因為沒有需要確認接收的資料所以 ACK 為 0。
SYN:同步位,用於在建立連線時同步序號。剛開始建立連線時並沒有歷史接收的數據,所以ack 也就沒有辦法設置,這是按照正常的機制就無法運作了,SYN 的作用就是解決這個問題的,當接收端接收到SYN = 1 的報文時就會直接將ack 設定為接收到的seq + 1 的值,注意這裡的值並不是檢驗後設定的,而是根據SYN 直接設定的,這樣正常的機制就可以運作了,所以SYN 叫同步位元. SYN 會在前兩次握手時都為 1,這是因為通訊的雙方的 ack 都需要設定初始值。
FIN:終止位,用來在資料傳輸完畢後釋放連線。
參考網域設置,如下是我在騰訊雲網域的設定
#記錄類型:
A記錄: 將網域指向一個IPv4位址(例如:8.8.8.8)
CNAME:將網域指向另一個網域(例如www.54tianzhisheng .cn)
MX: 網域名稱指向郵件伺服器位址
TXT:可任意填寫,長度限制255,通常做SPF記錄(反垃圾郵件)
NS:網域名稱伺服器記錄,將子網域指定其他DNS伺服器解析
AAAA:將網域指向一個iPv6位址(例如:ff06:0:0:0:0:0:0:c3)
#SRV:記錄提供特定服務的伺服器(例如xmpp-server.tcp)
顯性URL:將網域301重新導向到另一個位址
#隱性URL:類似顯性URL,但是會隱藏真實目標位址
主機記錄:
要解析www.54tianzhisheng.cn,請填入www。 主機記錄就是網域前綴,常見用法有:
www: *解析後的網域為 www.54tianzhisheng.cn。
*@: 直接解析主網域 54tianzhisheng.cn。
*: 泛解析,符合其他所有網域 *.54tianzhisheng.cn。
mail: 將網域名稱解析為 mail.54tianzhisheng.cn,通常用於解析郵件伺服器。
二級網域: 如:abc.54tianzhisheng.cn,填入abc。
手機網站: 如:m.54tianzhisheng.cn,填m。
Socket 分為 ServerSocket 和 Socket 兩大類。
ServerSocket 用於伺服器端,可以透過 accept 方法監聽請求,監聽到請求後返回 Socket;
Socket 使用者俱體完成資料傳輸,客戶端直接使用 Socket 發送請求並傳輸資料。
隨便寫了個單方面發送訊息的demo:
客戶端:
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"> import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span>##;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span>##io<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>. <span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>OutputStream<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span>;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"> import</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"> java</span>
.net
Socket##;
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>
##/**<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>
* Created by 10412 on 2017/5/2.<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>
## * TCP用戶端: <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果連線成功,就表示通道建立了,socket流就已經產生了。只要取得socket流中的讀取流和寫入流即可,只要透過getInputStream和getOutputStream就可以取得兩個流物件。 </span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"># ③:關閉資源。 </span>
*/ //单方面的输入! public class TcpClient { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 9999); OutputStream o = s.getOutputStream(); o.write("tcp sssss".getBytes()); s.close(); } catch (IOException e) { e.printStackTrace(); } } }
#伺服器端:
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span>##IOException<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span> ;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>
#import<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span> java<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span> #.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>io<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>InputStream<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span>;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>
import<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span> java<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>net<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">##.</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">;</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
/** * Created by 10412 on 2017/5/2. */ public class TcpServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务 Socket s = ss.accept();//获取客户端对象 String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); System.out.println(ip + " : " + port + " connected"); // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。 InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流 byte[] bytes = new byte[1024]; int len = ins.read(bytes); String text = new String(bytes, 0, len); System.out.println(text); //关闭资源 s.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }
以上是Spring MVC程式碼實踐之網站架構及演變的詳細內容。更多資訊請關注PHP中文網其他相關文章!