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