Tomcat源码学习(4)-How Tomcat works(转)
ServerSocket類(lèi)
??? Socket類(lèi)代表一個(gè)客戶(hù)端套接字,即任何時(shí)候你想連接到一個(gè)遠(yuǎn)程服務(wù)器應(yīng)用的時(shí)候你構(gòu)造的套接字,現(xiàn)在,假如你想實(shí)施一個(gè)服務(wù)器應(yīng)用,例如一個(gè)HTTP服務(wù)器或者FTP服務(wù)器,你需要一種不同的做法。這是因?yàn)槟愕姆?wù)器必須隨時(shí)待命,因?yàn)樗恢酪粋€(gè)客戶(hù)端應(yīng)用什么時(shí)候會(huì)嘗試去連接它。為了讓你的應(yīng)用能隨時(shí)待命,你需要使用java.net.ServerSocket類(lèi)。這是服務(wù)器套接字的實(shí)現(xiàn)。
??? ServerSocket和Socket不同,服務(wù)器套接字的角色是等待來(lái)自客戶(hù)端的連接請(qǐng)求。一旦服務(wù)器套接字獲得一個(gè)連接請(qǐng)求,它創(chuàng)建一個(gè)Socket實(shí)例來(lái)與客戶(hù)端進(jìn)行通信。
??? 要?jiǎng)?chuàng)建一個(gè)服務(wù)器套接字,你需要使用ServerSocket類(lèi)提供的四個(gè)構(gòu)造方法中的一個(gè)。你需要指定IP地址和服務(wù)器套接字將要進(jìn)行監(jiān)聽(tīng)的端口號(hào)。通常,IP地址將會(huì)是127.0.0.1,也就是說(shuō),服務(wù)器套接字將會(huì)監(jiān)聽(tīng)本地機(jī)器。服務(wù)器套接字正在監(jiān)聽(tīng)的IP地址被稱(chēng)為是綁定地址。服務(wù)器套接字的另一個(gè)重要的屬性是backlog,這是服務(wù)器套接字開(kāi)始拒絕傳入的請(qǐng)求之前,傳入的連接請(qǐng)求的最大隊(duì)列長(zhǎng)度。
??? 其中一個(gè)ServerSocket類(lèi)的構(gòu)造方法如下所示:
public ServerSocket(int port, int backLog, InetAddress bindingAddress);
??? 對(duì)于這個(gè)構(gòu)造方法,綁定地址必須是java.net.InetAddress的一個(gè)實(shí)例。一種構(gòu)造InetAddress對(duì)象的簡(jiǎn)單的方法是調(diào)用它的靜態(tài)方法getByName,傳入一個(gè)包含主機(jī)名稱(chēng)的字符串,就像下面的代碼一樣。
InetAddress.getByName("127.0.0.1");
??? 下面一行代碼構(gòu)造了一個(gè)監(jiān)聽(tīng)的本地機(jī)器8080端口的ServerSocket,它的backlog為1。
new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));
??? 一旦你有一個(gè)ServerSocket實(shí)例,你可以讓它在綁定地址和服務(wù)器套接字正在監(jiān)聽(tīng)的端口上等待傳入的連接請(qǐng)求。你可以通過(guò)調(diào)用ServerSocket類(lèi)的accept方法做到這點(diǎn)。這個(gè)方法只會(huì)在有連接請(qǐng)求時(shí)才會(huì)返回,并且返回值是一個(gè)Socket類(lèi)的實(shí)例。Socket對(duì)象接下去可以發(fā)送字節(jié)流并從客戶(hù)端應(yīng)用中接受字節(jié)流,就像前一節(jié)"Socket類(lèi)"解釋的那樣。實(shí)際上,這章附帶的程序中,accept方法是唯一用到的方法。
應(yīng)用程序
??? 我們的web服務(wù)器應(yīng)用程序放在ex01.pyrmont包里邊,由三個(gè)類(lèi)組成:
·????? HttpServer
·????? Request
·????? Response
??? 這個(gè)應(yīng)用程序的入口點(diǎn)(靜態(tài)main方法)可以在HttpServer類(lèi)里邊找到。main方法創(chuàng)建了一個(gè)HttpServer的實(shí)例并調(diào)用了它的await方法。await方法,顧名思義就是在一個(gè)指定的端口上等待HTTP請(qǐng)求,處理它們并發(fā)送響應(yīng)返回客戶(hù)端。它一直等待直至接收到shutdown命令。??? 應(yīng)用程序不能做什么,除了發(fā)送靜態(tài)資源,例如放在一個(gè)特定目錄的HTML文件和圖像文件。它也在控制臺(tái)上顯示傳入的HTTP請(qǐng)求的字節(jié)流。不過(guò),它不給瀏覽器發(fā)送任何的頭部例如日期或者cookies。
??? 現(xiàn)在我們將在以下各小節(jié)中看看這三個(gè)類(lèi)。
轉(zhuǎn)載于:https://www.cnblogs.com/macula7/archive/2009/08/16/1960634.html
總結(jié)
以上是生活随笔為你收集整理的Tomcat源码学习(4)-How Tomcat works(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 做人应该知道的十个道理
- 下一篇: 诗歌rails之 定时任务 rufus-