精华内容
下载资源
问答
  • web通信需要使用http协议
    千次阅读 多人点赞
    2022-04-12 09:59:33

    标题【手动狗头🐶】,大佬轻饶





    WebSocket 是基于单个 TCP 的双向计算机通信协议。

    你可以在简单的谷歌、百度搜索中找到许多类似的定义,但是我想通过一些简单和明显的例子来说明这这些。



    一、什么是 WebSocket ?

    作为 HTML5 计划的一部分,开发的 WebSocket 规范引入了 WebSocket JavaScript 接口,该接口定义了一个全双工单套接字连接,通过该连接可以在客户端和服务器之间发送消息。

    WebSocket 标准简化了双向 Web 通信和连接管理的大部分复杂性。

    CometAjax 相比,WebSocket 代表了 Web 通信的下一个进化步骤。当然每种技术都有其独特的功能。

    WebSocketws://wss:// 开始。它是一个有状态的协议,这意味着客户端和服务器之间的连接将保持活动状态,直到它被任何一方(客户端或服务器)终止。客户端和服务器中的任何一个关闭连接后,连接都会从两端终止。

    让我们举一个客户端与服务器通信的例子,客户端是一个网络浏览器,每当我们启动客户端和服务器之间的连接时,客户端与服务器进行握手并决定创建一个新的连接和这个连接将保持活动状态,直到被其中任何一个终止。当连接建立并处于活动状态时,通信将使用相同的连接通道进行,直到终止。

    以下就是 WebSocket 连接所涉及的步骤。

    1. 客户端(浏览器)向服务器发送 HTTP 请求。
    2. 通过 HTTP 协议建立连接。
    3. 如果服务器支持 WebSocket 协议,则同意升级连接。(握手)
    4. 现在握手已经完成,初始 HTTP 连接被使用相同底层 TCP/IP 协议的 WebSocket 连接替换。
    5. 此时,数据可以在 ClientServer 之间自由来回流动。


    二、WebSocket 应用场景?

    首先,在不使用 WebSocket 的情况下访问网站。 网页通常通过 HTTP 连接在 Internet 上传输。为此客户端会为您执行的每个操作向服务器发出请求。使用 HTTP 访问网站时,客户端必须先向服务器提交请求。然后服务器通过发送请求的连接来响应。换句话说,HTTP 在基本的请求和响应架构上运行,会导致大量延迟。

    我举一个实在点的例子:

    我们平时点外卖

    0秒:食物到了吗?(客户)
    0秒:正在配送。(外卖小哥)
    1秒:食物到了吗?(客户)
    1秒:正在配送。(外卖小哥)
    2秒:食物到了吗?(客户)
    2秒:正在配送。(外卖小哥)
    3秒:食物到了吗?(客户)
    3秒:是的,先生,这是您的外卖。(外卖小哥)

    这就是我们常见的所说的 HTTP 轮询

    客户端向服务器重复请求并检查是否有任何消息要接收。

    如您所见,这不是很有效。我们正在使用不必要的资源,失败的请求数量也很麻烦。

    有没有办法克服这个问题?

    是的,有一种轮询技术可以用来克服这个缺陷,它被称为 长轮询。即:长轮询基本上涉及向服务器发出 HTTP 请求,然后保持连接打开以允许服务器稍后响应(由服务器确定)。

    长轮询版本:

    0秒:食物到了吗?(客户)
    3秒:是的,先生,这是您的外卖。(外卖小哥)

    尽管长轮询有效,但它在 CPU、内存和带宽方面消耗的非常高(因为我们在保持连接打开时阻塞了资源)。

    那么我们的救星就是:WebSocket

    WebSocket 协议的情况有所不同,可以使用动态调用方法实时调用。客户端所要做的就是通过传输 WebSocket 协议的握手来与服务器建立连接。这种握手提供了数据传输所需的所有识别信息。

    客户端(Web 浏览器)初始化连接,并定期发送“心跳”以告诉服务器连接始终处于活动状态,一旦建立连接,客户端和服务器(与 http 规范相反)可以向对方发送信息(也称为服务器推送)。

    这也与客户端驱动的 xmlhttprequest (ajax) 不同:客户端询问服务器它的状态是否是最新的,如果不是则更新,握手后通道保持打开状态,以实现近乎恒定的通信。

    这意味着服务器可以自行传递数据,而无需客户端请求。因此,如果服务器接收到新数据,它会将其传递给客户端,而无需客户端发出特殊请求。

    是不是特别好?所以应用场景也就很明显了

    • 聊天程序
    • 社交平台
    • 网络游戏

    • 所有凡是需要客户端与服务端实时通信的场景都可以使用


    三、代码中的 WebSocket

    对于 WebSocket 代码的实现,我们只需要 (编程语言或者框架名 + WebSocket) 关键词搜索引擎检索一下 就可以实现

    以下为不完整统计!仅供参考~

    WebSocket 目前支持以下浏览器:

    • Internet Explorer:版本 10 或更高版本
    • Firefox:版本 6 或更高版本
    • Chrome:版本 14 或更高版本
    • Opera:版本 12.10 或更高版本
    • Safari:版本 6 或更高版本

    在服务器端,WebSocket 可以与以下编程语言和框架一起使用:

    • Node.js
      • Socket.IO
      • WebSocket-Node
      • ws
    • Java
      • Jetty
    • Python
      • pyWebSocket
      • Tornado
    • C++
      • Libwebsockets


    四、一个完美的案例:在线聊天程序

    服务端: node.js
    前端: html+css+javascript


    实现服务器

    让我们开始写服务器代码
    首先,创建一个名为chat的文件夹。进入此文件夹并通过在终端中输入 npm init
    初始化项目,或者 yarn init 。 现在我们已经初始化了我们的应用程序。

    我们需要准备两个包

    npm install ws serve-handler
    

    这里的 ws 它是 Node.js 的纯 WebSocket 实现。

    根目录的 package.json 中记得加入 "type": "module"
    在这里插入图片描述

    chat/index.js

    import {createServer} from 'http';
    import staticHandler from 'serve-handler';
    import ws, {WebSocketServer} from 'ws';
    
    // 创建服务
    const server = createServer((req, res) => {
        return staticHandler(req, res, {public: 'public'})
    });
    
    // 创建一个WebSocket服务器
    const wss = new WebSocketServer({server})
    
    // 当有新的连接时
    wss.on('connection', (client) => {
        // 客户端连接
        console.log('Client connected !')
        client.on('message', (msg) => {
            // 客户端发送消息
            console.log(`Message:${msg}`);
            broadcast(msg)
        })
    })
    
    // 发送消息
    function broadcast(msg) {
        for (const client of wss.clients) {
            if (client.readyState === ws.OPEN) {
                client.send(msg)
            }
        }
    }
    
    server.listen(process.argv[2] || 8080, () => {
        console.log(`server listening...`);
    })
    


    实现客户端

    接下来,是时候实现我们的聊天应用程序的客户端了。本质上是一个带有一些基本 JavaScript 代码的最小 HTML 页面。


    chat/index.html

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="stylesheet" href="style.css">
            <title>聊天室</title>
        </head>
        <body>
            <div class="container">
                <p class="msg">消息:</p>
                <div id="messages" class="messages"></div>
                <form id="msgForm" class="msgForm">
                    <input type="text" placeholder="Send message" class="input" id="inputBox"/>
                    <input type="submit" class="btn" value="发送">
                </form>
            </div>
            <script type="text/javascript">
                // 初始化
                const ws = new WebSocket(`ws://localhost:8000`);
    
                ws.binaryType = "blob";
    
                // 连接成功
                ws.addEventListener("open", event => {
                    console.log("Websocket 连接打开");
                });
                // 关闭连接
                ws.addEventListener("close", event => {
                    console.log("Websocket 连接关闭");
                });
    
                // 消息事件
                ws.onmessage = function (message) {
                    const msgDiv = document.createElement('div');
                    msgDiv.classList.add('msgCtn');
                    // 获取消息
                    if (message.data instanceof Blob) {
                        reader = new FileReader();
                        // 接收到消息时触发
                        reader.onload = () => {
                            msgDiv.innerHTML = reader.result;
                            document.getElementById('messages').appendChild(msgDiv);
                        };
                        // 读取消息
                        reader.readAsText(message.data);
                    } else {
                        // 显示消息
                        console.log("Result2: " + message.data);
                        msgDiv.innerHTML = message.data;
                        document.getElementById('messages').appendChild(msgDiv);
                    }
                }
                // 发送消息
                const form = document.getElementById('msgForm');
                form.addEventListener('submit', (event) => {
                    event.preventDefault();
                    const message = document.getElementById('inputBox').value;
                    // 发送
                    ws.send(message);
                    document.getElementById('inputBox').value = ''
                })
            </script>
        </body>
    </html>
    

    chat/style.css

    接下来我们让页面变的好看一点

    html {
        font-size: 62%;
    }
    
    body {
        margin: 0;
        padding: 0;
        display: flex;
        justify-content: center;
    }
    
    .container {
        margin-top: 5rem;
        display: flex;
        flex-direction: column;
        width: 30%;
        height: 70vh;
    }
    
    .msg {
        color: blueviolet;
        font-size: 2rem;
    }
    
    .msgCtn {
        margin: 1rem 0;
        color: white;
        padding: 1rem 1rem;
        background-color: blueviolet;
        border-radius: 6px;
        font-size: 2rem
    }
    
    .msgForm {
        display: flex;
        flex-direction: row;
    }
    
    .input {
        height: 100%;
        flex: 4;
        margin-right: 2rem;
        border: none;
        border-radius: .5rem;
        padding: 2px 1rem;
        font-size: 1.5rem;
        background-color: aliceblue;
    }
    
    .input:focus {
        background-color: white;
    }
    
    .btn {
        height: 5rem;
        flex: 1;
        display: flex;
        justify-content: center;
        align-items: center;
        border-radius: .5rem;
        background-color: blueviolet;
        color: whitesmoke;
        border: none;
        font-size: 1.6rem;
    }
    


    最终效果

    让我们运行

    node index.js 8000
    

    然后运行 index.html 这个就不多描述了

    打开两个窗口,效果如下:

    在这里插入图片描述





    更多相关内容
  • webHTTP协议详解

    千次阅读 2021-12-22 16:45:17
    HTTP协议 URL 查看HTTP协议通信过程 HTTP请求报文 HTTP响应报文

    每日分享:

    不要垂头丧气,即使失去一切,明天仍在你手里。

    目录:

    1. HTTP协议
    2. URL
    3. 查看HTTP协议的通信过程
    4. HTTP请求报文
    5. HTTP响应报文

    一、HTTP协议

    1. HTTP协议的介绍

    HTTP协议(HyperText Transfer Protocol):超文本传输协议

    超文本是超级文本的缩写,是指超越文本限制或者超链接,比如图片、音乐、视频、超链接等等都属于超文本。

    HTTP协议之前的目的是传输网页数据的,现在允许传输任意类型的数据

    传输HTTP协议格式的数据是基于TCP传输协议的,发送数据之前需要建立连接

    2. HTTP协议的作用

    它规定了浏览器和Web服务器通信数据的格式,也就是说浏览器和Web服务器通信需要使用HTTP协议

    3. 浏览器访问web服务器的通信过程

    4. 小结

    •  HTTP协议是一个超文本传输协议
    • HTTP协议是一个基于TCP传输协议传输数据的
    • HTTP协议规定了浏览器和web服务器通信数据的格式

    二、URL

    1. URL的概念

    URL(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址,也就是我们常说的网址

    2. URL的组成

    URL的样子:

    https://news.163.com/18/1122/10/E178J2O4000189FH.html

    URL的组成部分:

    1. 协议部分:https://、http://、ftp://
    2. 域名部分:news.163.com
    3. 资源路径部分:/18/1122/10/E178J2O4000189FH.html

    域名:

    域名就是IP地址的别名,它是用点分割使用英文字母和数字组成的名字,使用域名目的就是方便的记住某台主机IP地址

    URL的扩展:

    https://news.163.com/hello.html?page=1&count=10

    • 查询参数部分:?page=1&count=10

    参数说明:

    • ?后面的page表示第一个参数,后面的参数都使用&进行连接

    3. 小结

    • URL就是网络资源的地址,简称网址,通过URL能够找到网络中对应的资源数据
    • URL组成部分
    1. 协议部分
    2. 域名部分
    3. 资源路径部分
    4. 查询参数部分(可选)

    三、查看HTTP协议的通信过程

    1. 谷歌浏览器开发者工具的使用

    右键->检查(或者快捷键F12)

     

     开发者工具标签选项说明:

    • 元素(Elements):用于查看或修改HTML标签
    • 控制台(Console):执行js代码
    • 源代码(Sources):查看静态资源文件,断点调试JS代码
    • 网络(Network):查看http协议的通信过程

    开发者工具使用效果图:

    开发者工具的使用说明:

    1. 点击Network标签选项
    2. 在浏览器的地址栏输入百度的网址,就能看到请求百度首页的http的通信过程
    3. 这里的每项记录都是请求+响应的一次过程

    2. 查看HTTP协议的通信过程

    查看HTTP请求信息的效果图:

     

     

     3. 小结

    • 谷歌浏览器的开发者工具是查看http协议的通信过程利器,通过Network标签选项可以查看每一次请求和响应的通信过程,调出开发者工具的通用方法:右键->检查
    • 开发者工具的Headers选项总共有三部分组成:
    1. General:主要信息
    2. Response Headers:响应头
    3. Request Headers:请求头
    • Response选项是查看响应体信息的

    四、HTTP请求报文

    1. HTTP请求报文介绍

    HTTP最常见的请求报文有两种:

    1. GET方式请求报文
    2. POST方式的请求报文

    说明:

    • GET:获取web服务器数据
    • POST:向web服务器提交数据

    2. HTTP GeT 请求报文分析

    HTTP GET请求报文:

     ---------- 请求行 -----------

    GET / HTTP/1.1         GET请求方式   请求资源路径   HTTP协议版本

     ---------- 请求头 -----------

    Host: www.itcast.cn     服务器的主机地址和端口号,默认是80

    Connection: keep-alive    和服务器保持长连接

    Cache-Control: max-age=0    缓存头,指定缓存机制

    Upgrade-Insecure-Requests: 1    浏览器升级不安全请求,使用 https请求

    User-Agent: Mozilla/5.0……       用户代理,也就是客户端名称

    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9                 可接受的数据类型

    Accept-Encoding: gzip, deflate         可接受的压缩格式

    Accept-Language: zh-CN,zh;q=0.9    可接受的语言

    Cookie: UM_distinctid=17d3c435deb834……   登录用户的身份标识

     ---------- 空行 -----------

    GET请求原始报文:

    GET / HTTP/1.1\r\n

    Host: www.itcast.cn\r\n

    Connection: keep-alive\r\n

    Cache-Control: max-age=0\r\n

    Upgrade-Insecure-Requests: 1\r\n

    User-Agent: Mozilla/5.0……\r\n

    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n

    Accept-Encoding: gzip, deflate\r\n

    Accept-Language: zh-CN,zh;q=0.9\r\n

    Cookie: UM_distinctid=17d3c435deb834……\r\n

    \r\n(请求头信息后面还有一个单独的‘\r\n’不能省略)

    说明:

            每项数据之间使用:\r\n

    3. HTTP POST请求报文分析

    HTTP POST请求报文(部分截图):

     请求体效果图(部分截图): 

    POST比GET最后(空行后)多了一个请求体,其余相同

    4. 小结

    • 一个HTTP请求报文可以由请求行、请求头、空行和请求体4个部分组成
    • 其中请求行由三部分组成:
    1. 请求方式
    2. 请求资源路径
    3. HTTP协议版本
    • GET方式的请求报文没有请求体,只有请求行、请求头、空行组成
    • POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成

    五、HTTP响应报文

    1. HTTP响应报文分析2.

    HTTP响应报文部分截图: 

    2. HTTP状态码介绍

    HTTP状态码是用于表示web服务器响应状态的3位数字代码

    状态码说明
    200请求成功
    307重定向
    400错误的请求,请求地址或参数有误
    404请求资源在服务器不存在
    500服务器内部源代码出现错误

    说明:

    307:重定向(它更改了你的请求地址)

    例:

    访问http://www.baidu.com它会给你重定向为http://www.baidu.com

    3. 小结

    • 一个HTTP响应报文是由响应行、响应头、空行和响应体4个部分组成
    • 响应行是由三部分组成:HTTP协议版本状态码状态描述,其中状态码200最常见
    展开全文
  • 了解web世界中, 各种网络通信协议, 实现的手段, 区别和原理. 另外发现, 网上很多博客, 问答等都没有回答清楚web中的一些协议, 通信的准确定义以及原理和实质.这里希望自己能逐步准确整理出来网络相关的概念,协议, ...

    1.应用场景

    了解web世界中, 各种网络通信协议, 实现的手段, 区别和原理.

    另外发现, 网上很多博客, 问答等都没有回答清楚web中的一些协议, 通信的准确定义以及原理和实质. 

    这里希望自己能逐步准确整理出来网络相关的概念,协议, 原理, 本质等. 

    再次发现, 弄清楚一个技术本质, 不下功夫是不行的.

    2.学习/操作

    1. 文档阅读

    TBD

    2. 整理输出

    2.1 App与后台通信协议

    网上暂答:

    通用的语言有很多种,例如英语和中文.

    在网络的通讯中,通用的协议有很多,其中http是被最广泛使用的。

    如果是私有的协议,那就只能自己另外设计.

    用http是最方便的,如果是私有协议,包含协议的封装和拆解,工作量大,前端程序员和后端程序员都要增加很多额外的工作量。而且私有协议对程序员的要求高,不适合从web网站转过来的开发者。除非是手游,不然用http就好了。

    问题

    App和服务器通讯使用长连接还是短连接?

    假设现在通过手机拨打另外一个人的手机,手机通话费用非常便宜[甚至可以忽略],但是有两个注意的地方:
    1.一台手机同一时间只能接听一个电话。
    2.一台手机接听电话前非常麻烦,要拨号啦,要等接听,这需要一段时间。

    App和服务器通讯使用长连接还是短连接这个问题,可以等同于上面电话模型,是一直保持着通话,还是有需要时才拨号通话这个问题?

    当App和服务器通讯使用长连接,就相当于一直保持着通话,服务器能保持的通讯数量有限,如果通讯满了,那其他App就不能和服务端通讯了。这种通讯方式,多数是使用socket或websocket连接长时间连接,对程序员的要求比较高,开发比较困难,除了手游和聊天推送服务外,不建议使用。

    当App和服务器通讯使用短连接,就相当于需要时才拨号通话。

    这种通讯方式,配合http协议,是现在主流的通讯方式,开发效率高,有大量的第三方资源,使用非常广泛,推荐使用这种方式。

    当App和服务器通讯使用短连接,就相当于需要时才拨号通话。这种通讯方式,配合http协议,是现在主流的通讯方式,开发效率高,有大量的第三方资源,使用非常广泛,推荐使用这种方式。

    当App调用api的时候,只需要明确下面3点
    1.这个api是干啥的(柜员机例子中,是取款功能,还是查询余额,还是转账)

    2.知道要输入什么(柜员机例子中,取款要输入金钱)

    3.知道结果是什么(柜员机例子中,取款是成功还是失败)

    至于api内部是怎么处理的,app根本无需理会。

    api,一般是以http的形式调用的,通过http传入参数,返回结果。

    其中,结果一般是以json格式返回的,因为json格式被众多计算机语言支持,而且省流量。

    2.2 浏览器与服务器通信

    TBD

    后续补充

    ...

    3.问题

    1. Q1: 浏览器只能支持http[包括http 1.0 / 1.1 / 2.0]协议吗?

    浏览器还支持: 

    ftp[文件传输协议], 用于Internet上的控制文件的双向传输。

    HTTPS [Hyper Text Transfer Protocol over Secure Socket Layer], 简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 //另外查看资料

    File[本地文件传输协议] , File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。

    IT中的应用:要使用File协议,基本的格式如下:file:///文件路径,

    比如要打开I盘test文件夹中的1.txt文件,那么可以在资源管理器浏览器地址栏中键入:file:///I:/test/1.txt [可以省略file:///]并回车。

    浏览器如下:

    资源管理器中:

    2. Q2: http协议只能使用tcp协议吗?

    A: TCP三次握手[为了建立可靠连接]而不是HTTP,HTTP可以不用TCP协议。

    http协议只定义了应用层的东西,下层的可靠性要传输层来保证,但是没有说一定要用tcp,只要是可以保证可靠性传输层协议都可以承载http,比如有基于sctp的http实现。 http也不是不能通过udp承载,在手机上就有人自己开发基于reliable udp的http协议,不过都是非标准的.

    3. Q3: http连接, socket连接 , websocket连接有什么区别?

    TBD

    4. Q4: 服务器能维持的连接数是怎样的? 跟什么因素有关?

    TBD

    后续补充 

    ...

    4.参考

    写一个即时通信的app,服务器端需要用到哪些技术? - 知乎

    常见浏览器协议_Pony_18的博客-CSDN博客_浏览器协议  

    后续补充

    ...

    展开全文
  • 既然有http为何还有RPC HTTP的REST风格的调用: REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络...

    📢 导读:
    本期是关于自定义通讯协议的讲解,和HTTP协议做对比,由浅入深,带读者遨游通讯协议的整个发展过程,以及帮助读者更深入的去了解RPC中的通讯协议。
    如果期待更多干货和知识分享和后续与微服务相关的文章,那就动动小指头点波关注吧!
    ⛳️ 分布式微服务专栏:分布式和微服务理论+实战从入门到完全掌握

    ⛳️ 1.首先说一下HTTP和RPC的区别

    • HTTP只是一个通信协议,工作在OSI的第七层,不是一个完整的远程调用方案。
    • 其实rpc不是一种协议,rpc是一种调用过程的方案/范式/实现。RPC是一个完整的远程调用方案,它包括了:接口规范+序列化反序列化规范+通信协议等。

    ⛳️ 2.HTTP协议和RPC调用过程的发展史,这个很重要

    • RPC在1984年就被人用来做分布式系统的通信,Java在1.1版本提供了Java版本的RPC框架(RMI),而HTTP协议在1990年才开始作为主流协议出现,而且HTTP发明的场景是用于web架构,而不是分布式系统间通信,这导致了在很长一段时间内,HTTP都是浏览器程序和后端web系统通信用的东西,上面的文档格式都是HTML(非常啰嗦),没有人会把HTTP作为分布式系统通信的协议。在很长一段时间内,RPC才是正统。
    • 随着前端技术的发展,AJAX技术和JSON文档在前端界逐渐成为主流,HTTP调用才摆脱HTML,开始使用JSON这一相对简洁的文档格式,为后面用于系统间调用定下基础。最后随着RESTFUL思潮的兴起,越来越多系统考虑用HTTP来提供服务,但这时候,RPC已经是各种大型分布式调用的标配了。
    • 现在大部分的系统都是给浏览器使用的,因此HTTP协议必不可少,而这大部分系统中的绝大部分,对于后端系统间调用的性能都是要求不高的,毕竟走的都是内网,它们关心的是前端和后端的性能,因此后端系统间调用如果能够采用和前端一样的技术栈,那无疑是维护成本最低的,而这时HTTP的技术生态也刚好满足这个条件,所以就星星之火可以燎原了,当然也不可一概而论,具体用什么协议,我们具体情况还需要具体分析。

    ⛳️ 3.再说一下HTTP的REST风格调用

    HTTP的REST风格的调用:
    REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
    在微服务的设计中,一个服务A如果访问另一个服务B,可以采用HTTP REST传输数据,并在两个服务之间进行序列化和反序列化操作,服务B把执行结果返回过来。我们的前后端分离开发也是一种REST风格的调用,如下图:
    在这里插入图片描述在这里插入图片描述


    ⛳️ 4.再说一下RPC

    为什么有RPC呢?
    方法的调用无法在同一个计算机的进程内,因为目前分布式微服务架构的流行,目前由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,此时就需要不同的系统间的通讯,甚至不同的组织间的通讯,这个时候RPC就应运而生了。

    RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

    RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,其调用协议通常包含传输协议序列化协议

    • 传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。
    • 序列化协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf hessian等

    出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想,如下图:
    在这里插入图片描述


    ⛳️ 5.有http,为何还需要使用RPC在应用层自己定义协议

    5.1简化传输的字节

    有http,为何还需要在应用层自己定义协议,因为通用定义的http1.1协议的tcp报文包含太多废信息,如是一个get的请求头和响应头信息:
    在这里插入图片描述

    可以看到请求头里面包含的信息实在是太多了,如果我们只需要传输Hello,Yushiwen 这么几个字符,那么可以看到http请求头里面携带的信息就占用了整个请求信息的百分之80以上,如果我们用PRC,就可以自定义传输协议,简化需要传输的字节。

    最后说一下HTTP2也有了很大改进,具体是自定义协议还是用HTTP协议,我们需要在具体的场景下具体分析。

    5.2封装了更多的服务特性

    RPC框架封装了很多服务特性,比如封装了“服务发现”,“负载均衡”,“熔断降级”等面向服务的高级特性。


    ⛳️ 6.什么情况下自定义传输协议,什么情况下使用HTTP协议

    具体得看业务场景,这里给出大致的思路:

    • Http协议适用于短连接、高延迟、大包通讯、通讯频率低,比如Web开发。
    • 自定义的协议可以使用于长连接、低延迟、小包通、讯频率高,比如我们玩的moba游戏王者荣耀。

    微服务相关博文持续更新中......
    2022.3.25
    author:YuShiwen
    于CSDN
    展开全文
  • 在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择。采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机、PC、浏览器)等等。这样实现了一个服务器之后,多个...
  • Web基础:HTTP协议基础

    千次阅读 2019-03-24 13:52:05
    2、超文本传输协议(HTTP)允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器(通过交换报文来完成网页请求和响应) 3、HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是...
  • HTTP协议互联网中最常用的网络协议。当然还有其他协议,如收发电子邮件使用POP3、SMTP和IMAP协议,如区块链使用P2P协议。那么在物联网中设备与服务器通信使用什么协议呢?
  • Internet Explorer,Firefox,Chrome等Web浏览器是世界上最受欢迎的网络应用程序之一。它们用于基本信息浏览,也用于各种其他需求,包括在线购物和休闲游戏。Web服务器是为Web浏览器提供内容的东西; 浏览器请求的...
  • 嵌入式Web项目(三)——HTTP协议详解

    千次阅读 2022-04-23 10:17:29
    文章目录概念基于请求与响应的模式请求信息...协议是指计算机通信网络中两台计算机之间进行通信所必须遵守的规定或准则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到
  • 目前串口调试助手很难提供灵活的数据可视化功能. 有时对于感兴趣信号的表示不够直观. 使用 HTML + JavaScript 语言制作了一个网页 WEB 应用, 在... 其中用到了 Web Serial API 实现串口通信, 使用 chart.js 绘制信号.
  • 这一篇跟大家分享 Web 客户端/网页与 Web 服务器的通信过程,并详细讲述通信协议HTTP 协议和 TCP 协议。 无论你是前端开发者还是后端开发者,以及测试工程师,这篇文章的知识都是你需要弄懂的。 读完这一篇文章,...
  • 1 “通信”与“通讯”傻傻分得清 传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片和视频图像。其...
  •  与服务器通信使用服务器提供的服务  间歇性接入网络  可能使用动态IP地址  不会与其他客户机直接通信 P2P点对点体系结构 没有永远在线的服务器 任意端系统/节点之间可以直接通讯 节点间歇性接入...
  • webservice 协议Web Service使用的是 SOAP (Simple Object Access Protocol)协议soap协议只是用来封装消息用的。封装后的消息你可以通过各种已有的协议来传输,比如http,tcp/ip,smtp,等等,你甚至还一次用自定义的...
  • HTTP协议详解

    千次阅读 2022-03-26 12:20:36
    当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信协议就是HTTP协议。 我们可以把这个...
  • Web基础与HTTP协议

    千次阅读 2021-10-02 11:15:33
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、DNS与域名二、域名1...网络是基于TCP/IP协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP地址),用以区别在网络上
  • web开发常用的协议 :TCP UDP 和HTTP

    千次阅读 2018-05-15 10:00:00
    HTTP:万维网浏览的协议; TCP:机器之间建立连接用到的协议; 1.TCP / IP是个协议组,可分为:网络层,传输层,应用层。 网络层:IP协议,ICMP协议,ARP协议,RARP协议和BOOTP协议; 传输层:TCP协议和UDP协议; ...
  • Web即时通信技术 -- Web Socket

    千次阅读 2021-12-01 11:47:36
    WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 协议在 2011 年由 IETF 标准化为RFC 6455,后由RFC 7936补充规范。 WebSocket 使得客户端和服务器之间的数据...
  • HTTP协议web攻击和https简单介绍

    千次阅读 2022-01-29 21:06:42
    几乎现今所有的 Web 网站都会使用会话 (session)管理、加密处理等安全性方面的功能,而 HTTP 协议内并 不具备这些功能。 因此,开发者需要自行设计并开发认证及会话管理功能来满足 Web 应用的安全。而自行设计就...
  • HTTP协议简单概述

    千次阅读 2022-03-18 14:43:39
    HTTP协议基础学习,概述
  • QQ使用通信协议

    万次阅读 多人点赞 2018-07-02 18:47:26
    一、概述。...因此,假如你所在的网络开放了80...就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。二、聊天消息通信。 采用UDP协...
  • Web基础:网络协议,HTTP

    千次阅读 2022-03-16 17:06:08
    OSI参考模型采用分层结构技术,把一个网络系统分成若干层,每一层都去实现不同的功能,每一层的功能都以协议形式正规描述,协议定义了某层同远方一个层通信使用的一套规则和约定。 应用层 网络服务与最终用户的...
  • 1. 对比了解HTTP/HTTPS的缺点。 2. 对比了解HTTP/HTTPS的通信过程。 3. 了解URI与URL的定义与区别。 4. 了解请求报文和响应报文的格式。
  • 浏览器与WEB服务器的网络协议

    千次阅读 2021-01-29 21:28:19
    浏览器与WEB服务器相互通信使用的是HTTP协议。 在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。 代理服务器是介于...
  • socket通信和websocket通信协议

    千次阅读 2018-08-10 12:04:32
    socket通信 网络上的两个程序通过一个双向的通信链接实现数据的交换,这个链接的一端称为一个socket socket通信流程图 服务器端通过创建一个socket的通信链接,然后绑定socket和端口号并监听,就可以接收来自...
  • TPC/IP协议是传输层协议   主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系...WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协
  • 使用SSL协议保证web服务通信安全

    千次阅读 2012-10-12 10:32:14
    因此,本文就将对SSL协议进行深入剖析,并介绍如何使用SSL技术保护Apache服务器通信。 1 SSL简介 通常的连接方式中,通信是以非加密的形式在网络上传播的,这就有可能被非法窃听到,尤其是用于认证的口令信息...
  • web通信原理

    千次阅读 2022-04-03 15:20:30
    web,浏览器和服务器通信
  • 剖析 基于HTTP 协议web服务器

    千次阅读 2022-03-17 09:23:38
    1、开门见山 —— B/S结构...  1.3 这一过程首先要通过 TCP 协议的三次握手建立与目标 Web 服务器的连接,然后 HTTP 协议生成针对目标 Web服务器的HTTP请求报文,通过 TCP、IP等协议发送到目标 Web 服务器上。 2、
  • 物联网通信协议清单

    千次阅读 2022-06-07 20:12:42
    梳理常见协议

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 298,552
精华内容 119,420
热门标签
关键字:

web通信需要使用http协议