0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Java实现简单的HTTP服务器

jf_ro2CN3Fa 来源:CSDN-简简单单神经蛙 2023-09-21 15:08 次阅读

关于SpringCloud远程调用采用HTTP而非RPC。

首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的响应,可以更加的灵活处理业务数据,而HTTP协议是跨平台的,符合微服务B/C数据交互的方式,可以的一套服务器对应移动H5、App、小程序提供服务。

RPC基于TCP协议,客服端与服务端需要进行三次握手完成可靠连接,第四步进行数据传输。因为TCP是数据传输层,传输协议需要服务器统一编写,进行二进制传输,依赖序列化和反序列化规则,对于大部分应用需要灵活变动数据则不适用,RPC常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

一个简单HTTP请求处理

在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单的HTTP服务器。

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

RPC

RPC(Remote Procedure Call:远程过程调用):是一种进程间通信方式,是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

通俗的说法就是:比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。

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

RPC两个核心模块:通讯,序列化。

注意:无论是何种类型的数据,最终都需要序列化转换成二进制流在网络上进行传输,数据的发送方需要将对象序列化转换为二进制流,而数据的接收方则需要把二进制流反序列化为对象。

Restful(HTTP)

Restful 指的是一组架构约束条件和原则。" 如果一个架构符合 Restful 的约束条件和原则,就称它为 Restful 架构。隐藏在 Restful 背后的理念就是使用 Web的现有特征和能力,更好地使用现有 Web 标准中的一些准则和约束。

虽然 Restful 本身受 Web技术的影响很深, 但是理论上 Restful 架构风格并不是绑定在 HTTP 上,只不过目前 HTTP 是唯一与 Restful 相关的实例。所以我们这里描述的 Restful 也是通过 HTTP 实现的 Restful。

RPC和HTTP的区别

首先,两者十分相似,有请求有响应。

不同:

RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。

Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。

优点

RPC更加透明,对用户方便。

HTTP方式更加灵活,没有规定API和语言,跨语言,跨平台。

缺点

RPC需要在API层面进行封装,限制了开发的语言环境。

选择

速度方面:RPC速度比HTTP快,底层都是TCP,HTTP消息往往比较臃肿,但是可以采用gzip压缩。

难度方面:RPC实现有点儿复杂,HTTP相对比较简单。

灵活性方面:HTTP更灵活,不需要关系实现的细节,可以跨平台,跨语言。

未来发展方向

微服务,强调独立,自治,灵活。RPC限制较多,因此微服务框架中,一般都会采用基于HTTP的rest风格服务。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8988

    浏览量

    85128
  • HTTP
    +关注

    关注

    0

    文章

    501

    浏览量

    31013
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1348

    浏览量

    78956
  • RPC
    RPC
    +关注

    关注

    0

    文章

    111

    浏览量

    11502
  • springcloud
    +关注

    关注

    0

    文章

    17

    浏览量

    1527

原文标题:SpringCloud 远程调用为啥要采用HTTP,而不是RPC?

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在labview中如何用http工具向web服务器发送数据?

    求助攻!在labview中如何用http工具向web服务器发送数据?
    发表于 10-17 20:48

    如何通过uip协议栈和ENC28J60网卡实现一个简单HTTP服务器

    如何通过uip协议栈和ENC28J60网卡实现一个简单HTTP服务器
    发表于 11-01 06:12

    使用NodeMCU创建一个简单HTTP服务器

    我正在尝试使用NodeMCU创建一个简单HTTP服务器 . 我启动nodeMCU然后将其连接到wifi,然后运行下面的程序 . 我可以从浏览连接到
    发表于 11-01 06:03

    如何使用Apache FtpServer实现嵌入式FTP服务器

    1.Apache FtpServer是一个纯Java实现的FTP服务器2.既可以作为一个完整的FTP服务器单独使用,也可以在Java程序中调
    发表于 12-27 06:49

    如何基于HTTP Web服务器示例实现TLS HTTPS服务器

    我正在尝试基于此 HTTP Web 服务器示例实现 TLS HTTPS 服务器:https://github.com/STMicroelectronics/x-cube-azrtos-
    发表于 01-04 06:23

    JAVA教程之TCP服务器

    JAVA教程之TCP服务器端,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 10次下载

    java如何实现简单http服务器

    超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念
    发表于 12-06 09:15 6629次阅读
    <b class='flag-5'>java</b>如何<b class='flag-5'>实现</b><b class='flag-5'>简单</b>的<b class='flag-5'>http</b><b class='flag-5'>服务器</b>

    何用Python 实现 HTTP 和 FTP 服务器

    有时你需临时搭建一个简单的 Web Server,但你又不想去安装 Apache、Nginx 等这类功能较复杂的 HTTP 服务程序时。这时可以使用 Python 内建的 SimpleHTTPServer 模块快速搭建一个
    发表于 06-19 11:48 1523次阅读

    如何正确的理解使用WEB服务器和应用程序服务器HTTP服务器

    WEB服务器、应用程序服务器HTTP服务器有何区别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种服务器
    发表于 05-27 08:00 0次下载
    如何正确的理解使用WEB<b class='flag-5'>服务器</b>和应用程序<b class='flag-5'>服务器</b>及<b class='flag-5'>HTTP</b><b class='flag-5'>服务器</b>

    Java编程:发送HTTP请求到服务器

    Java程序需要向服务器发送请求或读取服务器数据时,使用URLConnection类是比较好的选择。URLConnection类封装了与服务器互动操作的方法,通过它可以建立与
    的头像 发表于 07-01 09:59 3054次阅读
    <b class='flag-5'>Java</b>编程:发送<b class='flag-5'>HTTP</b>请求到<b class='flag-5'>服务器</b>

    基于LwIP的HTTP服务器设计

    前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议。
    的头像 发表于 12-14 15:15 1601次阅读
    基于LwIP的<b class='flag-5'>HTTP</b><b class='flag-5'>服务器</b>设计

    用于Java服务器的ChartFX 8

    多年来,ChartFX for Java 一直是Java服务器应用程序数据可视化组件的领导者。ChartFX 8 for Java Server 现在为NetBeans和所有基于Ecl
    的头像 发表于 07-29 08:58 844次阅读

    HTTP服务器项目实现介绍

    项目介绍 本项目实现的是一个HTTP服务器,项目中将会通过基本的网络套接字读取客户端发来的HTTP请求并进行分析,最终构建HTTP响应并返回
    的头像 发表于 11-08 16:54 895次阅读
    <b class='flag-5'>HTTP</b><b class='flag-5'>服务器</b>项目<b class='flag-5'>实现</b>介绍

    如何利用AWFlow搭建HTTP服务器

    本文将基于EsDA开发套件快速在开发板上搭建HTTP服务器,为HTTP客户端提供了访问板子的外设资源,数据以及文件读写等接口,实现设备与网络服务
    的头像 发表于 12-14 08:24 548次阅读
    如何利用AWFlow搭建<b class='flag-5'>HTTP</b><b class='flag-5'>服务器</b>

    使用NS1串口服务器HTTP模式上传服务器数据

    HTTP协议工作于客户端-服务端架构之上。浏览作为HTTP客户端通过URL向HTTP服务端即W
    的头像 发表于 08-30 12:36 258次阅读
    使用NS1串口<b class='flag-5'>服务器</b><b class='flag-5'>HTTP</b>模式上传<b class='flag-5'>服务器</b>数据