-
1 # 寫程式設計師的程式碼
-
2 # IT界的一股清流
socket是作業系統提供的用於兩個程式進行端到端通訊的介面,是對傳輸層和網路層通訊端點的抽象,一般來說常用的是使用TCP,UDP協議的socket(也有raw socket,也就是可以選擇不使用TCP/IP協議,不過用的很少)。
然後TCP socket只提供了基於TCP的位元組流通訊,沒有規定這個位元組流裡的內容代表啥,於是就需要應用層協議,也就是以HTTP,FTP,SMTP等為代表的協議,這些協議是在使用TCP協議通訊的基礎上定製的。那如何使用TCP進行通訊?答案就是使用socket,所以socket其實跟TCP,HTTP這些不能並列講,因為它不是協議,它是使用某個協議的進行通訊的介面。UDP也一樣是用socket。
tomcat屬於基於HTTP協議的一個伺服器程式,和前面的也不是一類的,而servlet是tomcat中一個部件,那其實跟什麼通訊都沒啥關係了,他就是一個用於實現業務的介面,tomcat接收,解釋HTTP訊息內容之後交給servlet,servlet處理完生成結果之後再使用tomcat的介面把結果發給客戶端,servlet只負責處理,由tomcat來收發。
所以總的來說就是,人們使用socket,讓socket基於TCP/UDP等協議來保證雙方能收發以位元組為單位的資訊,這個資訊僅僅代表二進位制內容,就跟你10101010可以看做字元也可以看做數一樣,是沒有規定其含義的。然後用HTTP協議來規定這些位元組要怎麼排列,分成哪幾個部分,每個部分代表什麼意思,這樣就有了含義。最後tomcat則再使用HTTP協議,來跟客戶端交換資訊,交換的是什麼資訊則由servlet處理,最終實現一個可配置可擴充套件的web伺服器。
網路的東西層次性是很強的,上層基於下層,servlet基於tomcat執行,tomcat基於HTTP協議進行通訊,HTTP基於TCP實現,而TCP通訊則是透過呼叫系統提供的socket函式進行,TCP是協議,socket則是實現這個協議的協議棧。同理還有類似的必如HttpClient,HttpServer這樣的類,就是HTTP協議棧,是協議的軟體實現,這個跟socket是一類的,只不過位於的層級不一樣。
-
3 # 宋v第三幕
一、協議
在闡述標題涉及到的3個關鍵詞之前,非常有必要介紹下相關的協議,因為協議是指導做事的原則
TCP/IP協議:這其實是兩個協議,因為它們之間相互依賴,所以通常一起稱呼。IP協議就是對網路中的每個節點進行標識,而標識的依據就是為每個節點分配一個唯一的IP。有了唯一的標識,節點間如何進行資料互動呢?於是就約定了TCP傳輸協議,就是節點間首先需要三次握手建立連線,再進行資料傳輸,最後透過四次揮手來斷開連線;當然了,網路傳輸協議不是隻有TCP,還有UDP協議,UDP協議的不同之處,就在於並不建立安全連線,只要知道了對方節點的IP,朝這個IP進行資料傳輸就行了,不關心對方是否接收成功,所以UDP協議的傳輸效率高,但傳輸質量低,只適合對資料完整性要求不嚴格的場景,比如影片通話、語音通話,而TCP協議則適用於對資料完整性要求嚴格的場景,比如郵件傳輸、文字傳輸等;
HTTP協議:在資訊化技術發展的早起,有很多應用的架構都是CS架構,即client-server的結構,所以一個應用往往要開發兩個模組(client端和server端),而且應用部署的成本也很高,如果有100臺客戶端,則需要安裝100次。(曾經做醫院相關的系統,每次上線,都需要跑到各個科室去安裝客戶端),那有沒有更好的解決方案?當然有,採用BS架構,一個瀏覽器Browser足以,所有的應用都透過瀏覽器作為client入口,就不需要再為各自的應用搭建客戶端了,這就是我們常說的網站了,只要遵循瀏覽器Browser的HTTP協議即可,**就是所有的資料互動都有首行、報文頭、報文體 **就行啦,按照這個格式,就能透過瀏覽器Browser進行互動了。
二、Socket、Servlet、Tomcat關係
我們瞭解了以上的協議,但協議是不幹活的,它只是大家遵循的原則而已,就像介面一樣,必須要有相應的實現類來做具體的事情。
Socket:遵循TCP/IP(也包括UDT)協議的實現,是透過它來進行的網路通訊,比如你和你的好友透過QQ進行聊天,其實是你的電腦和他的電腦在透過Socket在進行資料的互動。
Servlet:是J2EE標準的一部分,制定了Java中處理Web請求的標準。Servlet的作用是接收、處理、返回遵循HTTP協議的報文。是Socket的一種應用。(標準跟協議一樣,都是一種規範,不過標準的區別在於它具有強制性的意義)
為什麼要封裝成HTTP報文的格式呢?因為它是在Browser中進行展示和傳輸的,你用了Browser作為客戶端,就要遵循Browser約定的規範(HTTP協議)嘛,你不遵循Browser沒法兒給你展示。
Tomcat:Servlet是一種標準,它的實現就是透過Tomcat這個容器來完成的。接下來看下Tomcat的實現細節
-
4 # 小書童neyo
socket是java實現tcp/ip協議組的抽象,也就是說在java環境中,你要透過網路傳輸資料,進行資料互動就不得不使用socket套接字,位於最底層。servlet是j2ee標準用於加速web快發,提供了javaweb開發的高度抽象。tomcat就是對servlet抽象的具體實現,它遮蔽了複雜的網路互動,提供了對http協議的封裝,具體的網路互動都由tomcat替程式設計師做了,程式設計師只需要按照servlet的標準寫一些業務程式碼就行。 那麼試著想想,如果沒有servlet和tomcat我們需要實現從一個普通的頁面中的某一個form表單,點選提交請求到後端某個介面。大概會做那些事?1.對於服務端來說 肯定需要建立一個socket,然後繫結ip和port,阻塞等待客戶端進行請求。2.頁面上是不是也得透過socket進行對服務端的連線?3.連線成功後開始傳輸資料,是不是得將普通的字串,檔案啥的轉化成byte進行傳輸.....還有很多限制,就不一一列舉了。這才僅僅是一個普通的介面,一個普通的form表單,一個專案中成千上萬個介面都來這麼搞,肯定不行的。所以出現了servlet規範,它列舉了關於java web開發的一切相關的東西,我們只需要按照它的標準來,繼承一個servlet就行,然後重寫它的service方法,透過配置在web.xml中就可以直接進行互動。引數,資料都放在request裡面,要啥就去裡面取... tomcat就是把servlet的所有標準都實現的容器,做類比 servlet可以看成一個普通的java interface,那麼tomcat就是它的一個具體的實現類。面向介面程式設計,是面向的servlet,具體怎麼做我們不用關心都交給tomcat就行。說了這麼多,水平有限也不知道你能不能理解。僅代表個人觀點,如有不嚴謹的地方,還望大家多多包涵。
回覆列表
socket是tcp/ip通訊,servlet是供java使用的http方法,tomcat是實現servlet規範的容器。