http之tcp具體實現(xiàn)

? ? ? ?我這人比較懶,之前計劃每周至少一篇博客,但是自從寫了幾篇之后再也沒減持下去。最近有個小伙伴在http長連接下面@我。因此呢,為了避免以后有人還問。所以這次我寫一個http之tcp具體實現(xiàn),幫助大家具體理解所謂的通信協(xié)議到底是什么。

? ? ? ?*******所謂的通信協(xié)議就是通信雙方約定的規(guī)則*******

? ? ? ? 比如對于tcp來說,雙方約定建立鏈接時,相互hello對方一個,發(fā)起這多hello一次。結(jié)束時雙方bye一次,并相互確認(rèn)bye聽到了。這就是tcp協(xié)議的一部分。當(dāng)然tcp協(xié)議很復(fù)雜,還有很多其他約定。

? ? ? ? http是以消息封裝在tcp消息體里的。在傳輸層來看,http協(xié)議就是一個消息。網(wǎng)上具體背書式的介紹http協(xié)議我就不介紹了。請參看我寫的http協(xié)議那篇里面有鏈接。下面直接討論http實現(xiàn)的主干邏輯。??


????????本文是使用ServerSocketChannel實現(xiàn)的。這個東西依賴于java。不知道其他語言怎么搞得,沒考究過。不過應(yīng)該萬變不離其宗。

? ? ? ? 上圖為通過線程綁定端口,注冊通道,讓后通過線程啟動,來監(jiān)聽web服務(wù)。


上圖為接受tcp連接是個SocketChannel對象,讓后將SocketChannel放到線程池中處理。

讀通道里的tcp連接內(nèi)容。

????????這里的解析我就不貼代碼了,因為太長。解析就是讀tcp消息體,讓后http協(xié)議格式,解析http消息。http協(xié)議格式:

就按照這個一行一行解析tcp消息體

????????然后根據(jù)URL里面 鏈接地址,解析出對應(yīng)的處理方法進行響應(yīng)處理。這就是http整個協(xié)議使用tcp實現(xiàn)的邏輯。因為我是使用公司代碼。很多有業(yè)務(wù)邏輯代碼我沒有貼。所以看起來可能有點缺失。

? ? ? ? 建議大家可以去看jetty源碼,就可以理解了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Tcp 通過下列方式提供可靠性: tcp 是面向連接,可靠的字節(jié)流服務(wù)。 字節(jié)流服務(wù):兩個應(yīng)用程序通過tcp 連接...
    irckwk1閱讀 758評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,666評論 1 32
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,299評論 0 14
  • 個人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 詩書禮樂易春秋,是為六藝。于君子有禮樂射御書數(shù)。禮者,進退;樂者內(nèi)和;射御武道也;書數(shù),文道也。
    十年一井閱讀 244評論 0 0

友情鏈接更多精彩內(nèi)容