0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Java實(shí)現(xiàn)簡(jiǎn)單的HTTP服務(wù)器

jf_ro2CN3Fa ? 來(lái)源:CSDN-簡(jiǎn)簡(jiǎn)單單神經(jīng)蛙 ? 2023-09-21 15:08 ? 次閱讀

關(guān)于SpringCloud遠(yuǎn)程調(diào)用采用HTTP而非RPC。

首先SpringCloud開(kāi)啟Web服務(wù)依賴(lài)于內(nèi)部封裝的Tomcat容器,而今信息飛速發(fā)展,適應(yīng)大流量的微服務(wù),采用Tomcat處理HTTP請(qǐng)求,開(kāi)發(fā)者編寫(xiě)Json作為資源傳輸,服務(wù)器做出相應(yīng)的響應(yīng),可以更加的靈活處理業(yè)務(wù)數(shù)據(jù),而HTTP協(xié)議是跨平臺(tái)的,符合微服務(wù)B/C數(shù)據(jù)交互的方式,可以的一套服務(wù)器對(duì)應(yīng)移動(dòng)H5、App、小程序提供服務(wù)。

RPC基于TCP協(xié)議,客服端與服務(wù)端需要進(jìn)行三次握手完成可靠連接,第四步進(jìn)行數(shù)據(jù)傳輸。因?yàn)門(mén)CP是數(shù)據(jù)傳輸層,傳輸協(xié)議需要服務(wù)器統(tǒng)一編寫(xiě),進(jìn)行二進(jìn)制傳輸,依賴(lài)序列化和反序列化規(guī)則,對(duì)于大部分應(yīng)用需要靈活變動(dòng)數(shù)據(jù)則不適用,RPC常用于Socket連接或一些基本不變動(dòng)的傳輸格式數(shù)據(jù),減少數(shù)據(jù)變動(dòng)帶來(lái)的開(kāi)發(fā)成本

建立Socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶(hù)端,稱(chēng)為ClientSocket ,另一個(gè)運(yùn)行于服務(wù)器端,稱(chēng)為ServerSocket ,套接字之間的連接過(guò)程分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶(hù)端請(qǐng)求,連接確認(rèn)。

一個(gè)簡(jiǎn)單HTTP請(qǐng)求處理

在Web應(yīng)用中,瀏覽器請(qǐng)求一個(gè)URL,服務(wù)器就把生成的HTML網(wǎng)頁(yè)發(fā)送給瀏覽器,而瀏覽器和服務(wù)器之間的傳輸協(xié)議是HTTP,那么接下來(lái)我們看下如何用Java來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的HTTP服務(wù)器。

45bd41b6-568c-11ee-939d-92fbcf53809c.jpg

RPC

RPC(Remote Procedure Call:遠(yuǎn)程過(guò)程調(diào)用):是一種進(jìn)程間通信方式,是一種技術(shù)的思想,而不是規(guī)范。它允許程序調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺(tái)機(jī)器上)的過(guò)程或函數(shù),而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即程序員無(wú)論是調(diào)用本地的還是遠(yuǎn)程的函數(shù),本質(zhì)上編寫(xiě)的調(diào)用代碼基本相同。

通俗的說(shuō)法就是:比如說(shuō)現(xiàn)在有兩臺(tái)服務(wù)器A和B,一個(gè)應(yīng)用部署在A服務(wù)器上,另一個(gè)應(yīng)用部署在B服務(wù)器上,如果A應(yīng)用想要調(diào)用B應(yīng)用提供的方法,由于他們不在一臺(tái)機(jī)器下,也就是說(shuō)它們不在一個(gè)JVM內(nèi)存空間中,是無(wú)法直接調(diào)用的,需要通過(guò)網(wǎng)絡(luò)進(jìn)行調(diào)用,那這個(gè)調(diào)用過(guò)程就叫做RPC。

45cafebe-568c-11ee-939d-92fbcf53809c.png45d904e6-568c-11ee-939d-92fbcf53809c.png

RPC兩個(gè)核心模塊:通訊,序列化。

注意:無(wú)論是何種類(lèi)型的數(shù)據(jù),最終都需要序列化轉(zhuǎn)換成二進(jìn)制流在網(wǎng)絡(luò)上進(jìn)行傳輸,數(shù)據(jù)的發(fā)送方需要將對(duì)象序列化轉(zhuǎn)換為二進(jìn)制流,而數(shù)據(jù)的接收方則需要把二進(jìn)制流反序列化為對(duì)象。

Restful(HTTP)

Restful 指的是一組架構(gòu)約束條件和原則。" 如果一個(gè)架構(gòu)符合 Restful 的約束條件和原則,就稱(chēng)它為 Restful 架構(gòu)。隱藏在 Restful 背后的理念就是使用 Web的現(xiàn)有特征和能力,更好地使用現(xiàn)有 Web 標(biāo)準(zhǔn)中的一些準(zhǔn)則和約束。

雖然 Restful 本身受 Web技術(shù)的影響很深, 但是理論上 Restful 架構(gòu)風(fēng)格并不是綁定在 HTTP 上,只不過(guò)目前 HTTP 是唯一與 Restful 相關(guān)的實(shí)例。所以我們這里描述的 Restful 也是通過(guò) HTTP 實(shí)現(xiàn)的 Restful。

RPC和HTTP的區(qū)別

首先,兩者十分相似,有請(qǐng)求有響應(yīng)。

不同:

RPC需要滿(mǎn)足像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù),也就是對(duì)調(diào)用過(guò)程在API層面進(jìn)行封裝。

Http協(xié)議沒(méi)有這樣的要求,因此請(qǐng)求、響應(yīng)等細(xì)節(jié)需要我們自己去實(shí)現(xiàn)。

優(yōu)點(diǎn)

RPC更加透明,對(duì)用戶(hù)方便。

HTTP方式更加靈活,沒(méi)有規(guī)定API和語(yǔ)言,跨語(yǔ)言,跨平臺(tái)。

缺點(diǎn)

RPC需要在API層面進(jìn)行封裝,限制了開(kāi)發(fā)的語(yǔ)言環(huán)境。

選擇

速度方面:RPC速度比HTTP快,底層都是TCP,HTTP消息往往比較臃腫,但是可以采用gzip壓縮。

難度方面:RPC實(shí)現(xiàn)有點(diǎn)兒復(fù)雜,HTTP相對(duì)比較簡(jiǎn)單。

靈活性方面:HTTP更靈活,不需要關(guān)系實(shí)現(xiàn)的細(xì)節(jié),可以跨平臺(tái),跨語(yǔ)言。

未來(lái)發(fā)展方向

微服務(wù),強(qiáng)調(diào)獨(dú)立,自治,靈活。RPC限制較多,因此微服務(wù)框架中,一般都會(huì)采用基于HTTP的rest風(fēng)格服務(wù)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9160

    瀏覽量

    85426
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    505

    瀏覽量

    31232
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1353

    瀏覽量

    79077
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11537
  • springcloud
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    1536

原文標(biāo)題:SpringCloud 遠(yuǎn)程調(diào)用為啥要采用HTTP,而不是RPC?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    在labview中如何用http工具向web服務(wù)器發(fā)送數(shù)據(jù)?

    求助攻!在labview中如何用http工具向web服務(wù)器發(fā)送數(shù)據(jù)?
    發(fā)表于 10-17 20:48

    如何通過(guò)uip協(xié)議棧和ENC28J60網(wǎng)卡實(shí)現(xiàn)一個(gè)簡(jiǎn)單HTTP服務(wù)器?

    如何通過(guò)uip協(xié)議棧和ENC28J60網(wǎng)卡實(shí)現(xiàn)一個(gè)簡(jiǎn)單HTTP服務(wù)器
    發(fā)表于 11-01 06:12

    使用NodeMCU創(chuàng)建一個(gè)簡(jiǎn)單HTTP服務(wù)器

    我正在嘗試使用NodeMCU創(chuàng)建一個(gè)簡(jiǎn)單HTTP服務(wù)器 . 我啟動(dòng)nodeMCU然后將其連接到wifi,然后運(yùn)行下面的程序 . 我可以從瀏覽連接到
    發(fā)表于 11-01 06:03

    如何使用Apache FtpServer實(shí)現(xiàn)嵌入式FTP服務(wù)器

    1.Apache FtpServer是一個(gè)純Java實(shí)現(xiàn)的FTP服務(wù)器2.既可以作為一個(gè)完整的FTP服務(wù)器單獨(dú)使用,也可以在Java程序中調(diào)
    發(fā)表于 12-27 06:49

    如何基于HTTP Web服務(wù)器示例實(shí)現(xiàn)TLS HTTPS服務(wù)器

    我正在嘗試基于此 HTTP Web 服務(wù)器示例實(shí)現(xiàn) TLS HTTPS 服務(wù)器:https://github.com/STMicroelectronics/x-cube-azrtos-
    發(fā)表于 01-04 06:23

    JAVA教程之TCP服務(wù)器

    JAVA教程之TCP服務(wù)器端,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?10次下載

    java如何實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器

    超文本傳輸協(xié)議是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。Java是一門(mén)面向?qū)ο缶幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念
    發(fā)表于 12-06 09:15 ?6647次閱讀
    <b class='flag-5'>java</b>如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>簡(jiǎn)單</b>的<b class='flag-5'>http</b><b class='flag-5'>服務(wù)器</b>

    何用Python 實(shí)現(xiàn) HTTP 和 FTP 服務(wù)器

    有時(shí)你需臨時(shí)搭建一個(gè)簡(jiǎn)單的 Web Server,但你又不想去安裝 Apache、Nginx 等這類(lèi)功能較復(fù)雜的 HTTP 服務(wù)程序時(shí)。這時(shí)可以使用 Python 內(nèi)建的 SimpleHTTPServer 模塊快速搭建一個(gè)
    發(fā)表于 06-19 11:48 ?1535次閱讀

    如何正確的理解使用WEB服務(wù)器和應(yīng)用程序服務(wù)器HTTP服務(wù)器

    WEB服務(wù)器、應(yīng)用程序服務(wù)器HTTP服務(wù)器有何區(qū)別?IIS、Apache、Tomcat、Weblogic、WebSphere都各屬于哪種服務(wù)器
    發(fā)表于 05-27 08:00 ?0次下載
    如何正確的理解使用WEB<b class='flag-5'>服務(wù)器</b>和應(yīng)用程序<b class='flag-5'>服務(wù)器</b>及<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>

    Java編程:發(fā)送HTTP請(qǐng)求到服務(wù)器

    當(dāng)Java程序需要向服務(wù)器發(fā)送請(qǐng)求或讀取服務(wù)器數(shù)據(jù)時(shí),使用URLConnection類(lèi)是比較好的選擇。URLConnection類(lèi)封裝了與服務(wù)器互動(dòng)操作的方法,通過(guò)它可以建立與
    的頭像 發(fā)表于 07-01 09:59 ?3083次閱讀
    <b class='flag-5'>Java</b>編程:發(fā)送<b class='flag-5'>HTTP</b>請(qǐng)求到<b class='flag-5'>服務(wù)器</b>

    基于LwIP的HTTP服務(wù)器設(shè)計(jì)

    前面我們實(shí)現(xiàn)了TCP服務(wù)器和客戶(hù)端的簡(jiǎn)單應(yīng)用,接下來(lái)我們實(shí)現(xiàn)一個(gè)基于TCP協(xié)議的應(yīng)用協(xié)議,那就是HTTP超文本傳輸協(xié)議。
    的頭像 發(fā)表于 12-14 15:15 ?1752次閱讀
    基于LwIP的<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>設(shè)計(jì)

    用于Java服務(wù)器的ChartFX 8

    多年來(lái),ChartFX for Java 一直是Java服務(wù)器應(yīng)用程序數(shù)據(jù)可視化組件的領(lǐng)導(dǎo)者。ChartFX 8 for Java Server 現(xiàn)在為NetBeans和所有基于Ecl
    的頭像 發(fā)表于 07-29 08:58 ?885次閱讀

    HTTP服務(wù)器項(xiàng)目實(shí)現(xiàn)介紹

    項(xiàng)目介紹 本項(xiàng)目實(shí)現(xiàn)的是一個(gè)HTTP服務(wù)器,項(xiàng)目中將會(huì)通過(guò)基本的網(wǎng)絡(luò)套接字讀取客戶(hù)端發(fā)來(lái)的HTTP請(qǐng)求并進(jìn)行分析,最終構(gòu)建HTTP響應(yīng)并返回
    的頭像 發(fā)表于 11-08 16:54 ?940次閱讀
    <b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>項(xiàng)目<b class='flag-5'>實(shí)現(xiàn)</b>介紹

    如何利用AWFlow搭建HTTP服務(wù)器

    本文將基于EsDA開(kāi)發(fā)套件快速在開(kāi)發(fā)板上搭建HTTP服務(wù)器,為HTTP客戶(hù)端提供了訪問(wèn)板子的外設(shè)資源,數(shù)據(jù)以及文件讀寫(xiě)等接口,實(shí)現(xiàn)設(shè)備與網(wǎng)絡(luò)服務(wù)
    的頭像 發(fā)表于 12-14 08:24 ?593次閱讀
    如何利用AWFlow搭建<b class='flag-5'>HTTP</b><b class='flag-5'>服務(wù)器</b>

    使用NS1串口服務(wù)器HTTP模式上傳服務(wù)器數(shù)據(jù)

    HTTP協(xié)議工作于客戶(hù)端-服務(wù)端架構(gòu)之上。瀏覽作為HTTP客戶(hù)端通過(guò)URL向HTTP服務(wù)端即W
    的頭像 發(fā)表于 08-30 12:36 ?358次閱讀
    使用NS1串口<b class='flag-5'>服務(wù)器</b><b class='flag-5'>HTTP</b>模式上傳<b class='flag-5'>服務(wù)器</b>數(shù)據(jù)