当前位置: 首页 > news >正文

Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)

 从一个问题聊起:

Http/Websocket 都称为一种协议,能用现实中的例子来解释协议吗?

AI 举例:

您(客户端): 您坐在餐厅桌子上,想点一份菜单。

服务员(服务器): 服务员站在您旁边,准备接受您的点餐请求。

点餐(HTTP 请求): 您向服务员递交一个菜单,上面列出了您想点的菜品。(菜单和你的点单就是协议的内容)

等待(等待响应): 服务员拿着菜单去厨房,等待厨师准备好食物。

上菜(HTTP 响应): 厨师准备好了您点的菜,服务员将食物端到您的桌子上。

上面这个例子目的就是你和餐厅之间的沟通,这个沟通要在餐厅的菜单内,同理浏览器要和服务器交互,有成千上万个浏览器,不能你说要炒豆角别人就给你做炒豆角,炒出来,你说不是你要的炒豆角,这个事情怎么说的清?所以,炒豆角,炒成几成熟,带不带肉,辣不辣,麻不麻,都在菜单上进行勾选,如果对方根本就没有豆角,你就不能点炒豆角,这份菜单就是你和餐厅之间的协议。

Http 有哪些具体的协议呢?

请求(Request): 客户端向服务器发送请求,请求特定资源或执行特定操作。

  • 请求行:包括 HTTP 方法(GET、POST、等)、请求的 URL 和协议版本。
  • 请求头:包含关于请求的附加信息,如用户代理、主机名等。
  • 请求正文:在 POST 请求中,可能会包含提交的数据。

响应(Response): 服务器向客户端返回响应,包含请求的结果或错误信息。

  • 状态行:包括协议版本、状态码和状态消息。
  • 响应头:包含关于响应的附加信息,如服务器类型、内容类型等。
  • 响应正文:包含服务器返回的数据。

HTTP 方法(HTTP Methods): 定义客户端请求的操作类型,常见的有 GET、POST、PUT、DELETE 等。

状态码(Status Codes): 服务器返回的三位数字代码,表示请求的处理结果。例如,200 表示成功,404 表示资源未找到,500 表示服务器内部错误等。

请求头(Request Headers)和响应头(Response Headers): 包含各种元数据,用于提供关于请求或响应的额外信息。

URL(Uniform Resource Locator): 指定 Web 上资源的地址。URL 包括协议、域名、端口、路径等。

Cookie 和 Session: 用于在客户端和服务器之间跟踪用户会话状态。

缓存控制(Caching): 控制客户端和服务器之间的数据缓存,以提高性能。

内容协商(Content Negotiation): 客户端和服务器协商最适合的内容格式,如请求 JSON 或 XML。

安全性(Security): HTTP 可以通过 HTTPS(基于 SSL/TLS 加密)来实现安全传输。

重定向(Redirection): 服务器可能会将请求重定向到其他 URL,常见的是 301 永久重定向和 302 临时重定向。

认证(Authentication): HTTP 可以通过 Basic Auth、Bearer Token 等方式进行用户认证。

跨域资源共享(CORS): 用于在不同域之间进行数据交换,涉及安全机制。

一张 Ajax 请求的截图

我们能看到请求时可以携带很多协议key,每个协议 key 都有对应的值,这里挑 Content-Type:application/json来看,意味着浏览器传过去的是一个 json 字符串,服务端拿到后,以 json格式进行处理,同理,我还可以传递 urlencode 形式,纯 text/plain文本形式,甚至是二进制流,这里解释下什么叫流?

通常我们看到的水流,主要觉得它很柔软,无孔不入,并且是连续的,但如果你拿电子显微镜来看,它就是一粒粒的水分子组成的,我们放大一下,把它们当成沙粒,你拉远镜头,那么流沙跟水流是一样的,这就是流体,由不连续的粒子组成。

二进制流也是这意思,每次传输一个比特,但是连续很快地发出去,连起来看,就像是电流在运行,这就是二进制流。

说这么多,就是告诉大家,流就是比特,由一个发射器往外发射,因为发射的非常快,就看起来像是连续的电流。

底层所有的流都是这样处理,只是颗粒度不一样,例如字符流,就是一次处理一个字符,一个字符又有多个比特构成。

自定义一些协议

如果你理解了协议就是由两端(人或者物)约定的一些暗号,那么这些暗号,也可以给服务器端约定一下,比如,在请求中增加一个 Token 键,这个键要携带一个值,用来鉴权,只要服务端允许接收这个 Token 那么浏览器端就能将这个 Token 传递过来。

为什么说服务端允许呢?像你看的电视剧,当一个人进入城门时,都得先进行验证身份的,如果你不在名单上,例如胡人,那是不让你进的,所以必须有服务端的允许,Token 才能进去。所以浏览器如果要发一个特殊的协议头,那是要请示一下服务端的,这个请示就叫 OPTION,很多人都知道 POST/GET,但知道 OPTION并不多。讲这个点在于,我想启发大家,编程来源现实,如果经历比较多,可以靠回想现实来推测编程中的技术,现实存在的问题,编程也会遇到,所以这样你的学习就变成主动的了。

扯了那么多都是要说明 Http 是一堆协议暗号的统称,这么多的暗号(我们称为标识吧)和暗号的值聚合在一起发给服务端,服务端收到后称这次发送为一次请求,就跟后厨的师傅又收到一份点餐一样。

为何还没讲到连接?

我们需要放大这个例子,你才能理解什么叫连接,也能知道一个连接是没有什么长短之分,也没有什么链路存在的,这将打破你常规的认识,实际上这才是计算机真正的运行方式。

连接就是一次有去有回的寄送快递的过程,寄送的快递员不是同一个人。

先把三次握手抛开,直接到握手完毕,完毕之后呢?看图:

我们在浏览器端建立了一个 XMLHttpRequest 对象,在服务端也会建立一个类似XMLHttpRequest对象,这个对象里面记录了什么?

Swoole 文档  这个文档里getclientinfo 返回了一个对象,这个对象正式服务端XMLHttpRequest存储的一些信息,就是这些信息,记录着客户端的 IP 和客户端的端口; 

有点懵?为何服务端还记录着客户端的端口号?端口号不是服务端才有的?有时候程序员看不到程序的全貌,因为程序是虚拟的,除非有人告诉你,或者你自己发现,否则它们对你而言就不存在。

回到寄送快递的概念:

你在一栋楼里,你要寄东西给别人,收货员就会同时记录你的门牌号,否则服务端回传给你的信件,你就收不到了(普通我们寄快递是单向的),所以你寄给服务端的包裹里就要有你的门牌地址和你的所住的大楼,这个客户端对象有一种能力,就是可以把给到它的 data发送给它的客户端。它同时还把自己注册到操作系统上,操作系统会分配一个端口号给它,等到这个端口收到消息后(服务端发过来的),操作系统就会把这些信息,转发给它的 onsucess 函数,形成了一次消息的请求与回调。

讲到这里,你觉得连接还有长短之分吗?你觉得连接还是连续的概念吗?

客户端的XMLHttpRequest

客户端的XMLHttpRequest 同样也记录着服务端的信息,在没有出现任何服务端要关闭,或者网络中断(这玩意是服务器检测并告知给XMLHttpRequest的)XMLHttpRequest都不会消失,一直留在内存里。

这就到了你编程的环节了,你new 了一个XMLHttpRequest,当 XMLHttpRequest 三次握手之后,确定远程服务端正常存在且已经安排了人来帮你处理事情了,你就可以放开心的往服务端发消息了。

但是快递站分配给你的快递小哥只有一次,当你用XMLHttpRequest发完一个包裹之后,同时另外一个快递小哥把服务端包裹拿给你后,他就给你拜拜了,下次你再想发信息,你得再跟快递站下单,让小哥过来取包裹。

这就是远程服务端对待 Http 请求反应,只要你是 Http 请求,只要返回给你数据了,之后就跟你就拜拜了,下次有事再说,这特别像你去政务大厅办事,一次只办一次事,办完 over。

早期的 HTTP1.0

没有快递站的概念,为啥?用的人少呗,你想寄东西,就自己去建个快递站,然后再把东西交给快递小哥送过去,拿过来。

随着业务量的提高,你觉得不能忍,每次都要你去造一个快递站这种事,想想来就来气,于是你揪结了一群请求,要求建个快递站

HTTP1.1

仅仅要建立个快递站的话,是不需要更改 HTTP1.0版本的,因为 HTTP 只是一个协议,为了要把协议拉下水,你不改协议谁给你劳师动众重新造快递站?你凑合着用吧,这其实也是现实世界的一种映射,既然要整修那就得有个名头,这个名头就是 HTTP1.0 有些协议不能满足我的需求了,因为我要建快递站,所以我需要新的寄送方式。看似无关的两个东西整合在一起了,于是借着改 HTTP 协议的名头,把传输层给改了。

改成了有圆通、中通、国通各种通的快递站,每次你要发包裹,都找个排队人少的要求给你分配一个快递员来取包裹,发包裹,把服务端返回来的包裹拿给你。

这个就是 HTTP1.1中有名的 tcp/ip 复用技术,先把快递站建了,然后发包裹这件事交给比较闲的那个站,这就是连接池的概念。

但是新的问题又来了

我的请求还是太多了,我要一下子发送 100 个包裹,业务量又大了,一个快递小哥必须一次性把 100 个包裹都发给服务端,然后还得把这 100 个包裹反馈结果都按顺序带回来,一旦搞乱了,我就分不清楚哪个对哪个了。

此时,你等了好久好久,快递小哥才把 100 个包裹的返回信息给你拿来了回来,偶尔还会有丢失,你还得重发,这已经让你忍不了了,你要求服务端继续升级,不能按照这种方式来传递,要换种方式。

HTTP2.0

我想怎么发就怎么发,想什么时候发就怎么发,想让谁发就让谁发,每个包裹上快递小哥都会帮我打上标记,返回来的时候也会带着这个标记,这样一出一进,你就能对上号了。

所以你就能各种发了。当然不能单干这个事情,还得拉着协议变更一下搞事情,于是 HTTP 协议又升级了。

以上就是 HTTP 的发家史。

Websocket 协议的由来

HTTP 一直都是发一次,返回一次,下次发货还的下单,每次下单都得填单,真恶心,能不能只让我填一次,之后让我和服务端直接调派小哥来传递我们的信件呢?

当然是可以的,解决方式是服务端提出来了,你先用 Http 请求给我发一条信息,然后在里面追加一个 Upgrade 升级标签,我收到后就安排专属小哥来给你送信件,只有你就不用填单了。

你一听觉得很棒,然后就跟服务端说,我们如果不按Http 方式沟通,那怎么能告知一些消息给你呢,比如我想跟你说拜拜,或者说有些包我没收全,你还得重复,再或者我说你给我发的包太大了等等。

于是服务端说,那就再造一个协议专门解决你说的这些问题吧,我们称他为 Websocket 如何?

你高兴地说:“太棒了,于是 Websocket 协议诞生了!”

以前参考的文章

http的长连接和短连接(史上最通俗!) - 简书1.以前的误解 很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。但终究觉得对于长连接一直懵懵懂懂的,有种...https://www.jianshu.com/p/3fc3646fad80

相关文章:

Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)

从一个问题聊起: Http/Websocket 都称为一种协议,能用现实中的例子来解释协议吗? AI 举例: 您(客户端): 您坐在餐厅桌子上,想点一份菜单。 服务员(服务器&#xff09…...

两两交换链表中的节点

你存在,我深深的脑海里~ 题目: 示例: 思路: 这个题有点类似于反转一个单链表,不同的地方在于这个题不全反转,所以我们不同的地方在于此题多用了一个prve指针保存n1的前一个节点,以及头的改变&a…...

HTTP与RPC的取舍

HTTP与RPC的取舍 HTTP和RPC都是常用的网络通信协议,它们各有优劣。选择何种协议,主要取决于应用的需求和场景。 HTTP和RPC都有各自的优点和缺点,首先我们对两种协议进行一个总结。 HTTP协议图 HTTP的优点: 广泛的支持&#xff1…...

微前端学习(上)

一、课程目标 微前端概念;现有方案利弊;Single-spa实现原理;掌握使用qiankun搭建微应用;二、课程大纲 微前端背景现在web应用面临的问题微前端的价值微前端应用具备哪些能力微前端解决方案有哪些基于qiankun的实践1、微前端背景 2014年: Martin Fowler和James Lewis共同提…...

【Axure视频教程】标签版多选下拉列表

今天教大家在Axure里如何制作标签版多选下拉列表的原型模板,该模板用中继器制作,制作完成后使用也方便,只需要在中继器表格里维护选项信息,即可自动生成交互效果,包括显示隐藏选项列表,选中和取消选中选项&…...

Sharepoint2013必备软件安装路径

SP2013是最后一个有foundation版本的,后续各个版本都是server版,要买lisence。免费的可以用,但安装组件有些链接已经失效了,自己手动下载的路径备份一下,已经下载好的完整版,在文章最后可以直接下载&#x…...

C++day4(关系运算符的重载)

关系运算符重载的作用&#xff1a;可以让两个自定义类型对象进行对比操作。 代码实现关系运算符的重载&#xff1a; #include <iostream>using namespace std;class Person {// friend const Person operator(const Person &L, const Person &R); private:int …...

农业水价综合改革系统主要组成

一、系统概述 农业水价改革灌区信息化系统主要由感知采集层、网络传输层、系统应用层等部分组成。通过无线技术、感知层技术与新型应用的有效结合&#xff0c;可以用于各种业务的传送&#xff0c;充分满足灌区监测站间的物与物互联&#xff0c;农业生产的自动化和信息化相结合。…...

使用批处理文件(.bat)启动多个CMD窗口并执行命令

由于每次启动本机的mongodb和kafka&#xff0c;都需要进入相关目录进行启动&#xff0c;操作相对繁琐&#xff0c;于是想起了批处理来帮忙一键启动。 在桌面新建一个txt文件&#xff0c;改后缀名为.bat&#xff0c;并加上下面的代码。 cd /d D:\env-java\mongodb-win32-x86_64…...

开源项目-会议室预约管理系统

哈喽,大家好,今天给大家带来一个开源项目-会议室管理系统。项目基于SpringBoot+VUE开发。 会议室管理系统主要分为 前台会议室预约管理系统 和 会议室后台管理系统 两部分 前台会议室预约管理系统主要有申请会议室,预约进程,查看历史会议三部分 后台管理系统主要有会议室…...

Flask路由注册route的几种方式

前言 Flask路由注册的三种方式&#xff1a; app.routeapp.add_url_rule蓝图 app.route&#xff08;添加变量&#xff09; from flask import Flaskapp Flask(__name__) app.config.from_pyfile(config/base_setting.py) app.route("/") def hello():return "…...

Elasticsearch 查询之Function Score Query

前言 ES 的主查询评分模式分为两种&#xff0c;是信息检索领域的重要算法&#xff1a; TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分&#xff08;relevance scoring&#xff09;算法。在此之前&#xff0c;Elasticsearch 使…...

【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…...

解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

解锁ChatGLM-6B的潜力&#xff1a;优化大语言模型训练&#xff0c;突破任务困难与答案解析难题 LLM&#xff08;Large Language Model&#xff09;通常拥有大量的先验知识&#xff0c;使得其在许多自然语言处理任务上都有着不错的性能。 但&#xff0c;想要直接利用 LLM 完成…...

Apipost:提升API开发效率的利器

在数字化时代&#xff0c;API已经成为企业和开发者实现业务互通的关键工具。然而&#xff0c;API的开发、调试、文档编写以及测试等工作繁琐且复杂。Apipost为这一问题提供了完美的解决方案。 Apipost是一款专为API开发人员设计的协同研发平台&#xff0c;旨在简化API的生命周…...

论文解读:Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions

发布时间&#xff1a;2022.4.4 (2021发布&#xff0c;进过多次修订) 论文地址&#xff1a;https://arxiv.org/pdf/2112.08088.pdf 项目地址&#xff1a;https://github.com/wenyyu/Image-Adaptive-YOLO 虽然基于深度学习的目标检测方法在传统数据集上取得了很好的结果&#xf…...

springboot 基于JAVA的动漫周边商城的设计与实现64n21

动漫周边商城分为二个模块&#xff0c;分别是管理员功能模块和用户功能模块。管理员功能模块包括&#xff1a;文章资讯、文章类型、动漫活动、动漫商品功能&#xff0c;用户功能模块包括&#xff1a;文章资讯、动漫活动、动漫商品、购物车&#xff0c;传统的管理方式对时间、地…...

uniapp - 全平台兼容实现上传图片带进度条功能,用户上传图像到服务器时显示上传进度条效果功能(一键复制源码,开箱即用)

效果图 uniapp小程序/h5网页/app实现上传图片并监听上传进度,显示进度条完整功能示例代码 一键复制,改下样式即可。 全部代码 记得改下样式,或直接...

第 7 章 排序算法(2)(冒泡排序)

7.5冒泡排序 7.5.1基本介绍 冒泡排序&#xff08;Bubble Sorting&#xff09;的基本思想是&#xff1a;通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;,依次比较相邻元素的值&#xff0c;若发现逆序则交换&#xff0c;使值较大的元素逐渐从前移向后部…...

软件测试技术之可用性测试之WhatsApp Web

Tag&#xff1a;可行性测试、测试流程、结果分析、案例分析 WhatsApp是一款面向智能手机的网络通讯服务&#xff0c;它可以通过网络传送短信、图片、音频和视频。WhatsApp在全球范围内被广泛使用&#xff0c;是最受欢迎的即时聊天软件。 虽然&#xff0c;在电脑上使用WhatsAp…...

制作 Mikrotik CHR AWS AMI 镜像

文章目录 制作 Mikrotik RouterOS CHR AWS AMI 镜像前言前期准备配置 Access Key安装配置 AWS CLI创建 S3 bucket上传 Mikrotik CHR 镜像trust-policy配置role-policy 配置创建 AMI导入镜像查看导入进度导入进度查看注册镜像参考:制作 Mikrotik RouterOS CHR AWS AMI 镜像 前言…...

科技成果鉴定测试有什么意义?专业CMA、CNAS软件测评公司

科技成果鉴定测试是指通过一系列科学的实验和检测手段&#xff0c;对科技成果进行客观评价和鉴定的过程。通过测试&#xff0c;可以对科技成果的技术优劣进行评估&#xff0c;从而为科技创新提供参考和指导。 一、科技成果鉴定测试的意义 1、帮助客户了解科技产品的性能特点和…...

知识储备--基础算法篇-排序算法

1.知识--时间复杂度和空间复杂度 1.2时间复杂度 一个算法所花费的时间与其中语句的执行次数成正比例&#xff0c;算法中的基本操作的执行次数&#xff0c;为算法的时间复杂度。 1.3空间复杂度 空间复杂度不是程序占用了多少bytes的空间&#xff0c;空间复杂度算的是变量的个…...

Qt+C++动力监控动画仿真SCADA上位机

程序示例精选 QtC动力监控动画仿真SCADA上位机 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC动力监控动画仿真SCADA上位机>>编写代码&#xff0c;代码整洁&#xff0c;规则…...

Flask 单元测试

如果一个软件项目没有经过测试&#xff0c;就像做的菜里没加盐一样。Flask 作为一个 Web 软件项目&#xff0c;如何做单元测试呢&#xff0c;今天我们来了解下&#xff0c;基于 unittest 的 Flask 项目的单元测试。 什么是单元测试 单元测试是软件测试的一种类型。顾名思义&a…...

前端面试:【前端工程化】CommonJS 与 ES6 模块

嗨&#xff0c;亲爱的前端开发者&#xff01;在现代Web开发中&#xff0c;模块化是构建可维护和可扩展应用程序的关键。本文将深入探讨两种主要的JavaScript模块系统&#xff1a;CommonJS 和 ES6 模块&#xff0c;以帮助你了解它们的工作原理、用法以及如何选择合适的模块系统。…...

keepalived双机热备,keepalived+lvs(DR)

本节主要学习了keepalivedlvs的作用和配置方法主要配置调度器和web节点&#xff0c;还有keepalived的双击热备&#xff0c;主要内容有概述&#xff0c;安装&#xff0c;功能模块&#xff0c;配置双击热备&#xff0c;验证方法&#xff0c;双击热备的脑裂现象和VIP无法通信。 目…...

unity-ShaderGraph全节点

1.Artistic美术 Adjustment调整 Channel Mixer 混合颜色通道 Contrast 设置对比度 Hue 设置色调 range需要选normalized Invert Colors 反转颜色 Replace Color 设置两个颜色通道互换&#xff0c;可调参数 Saturation 设置饱和度 White Balance 白平衡&#xff08;调冷暖色调&a…...

C++入门:内联函数,auto,范围for循环,nullptr

目录 1.内联函数 1.1 概念 1.2 特性 1.3 内联函数与宏的区别 2.auto关键字(C11) 2.1 auto简介 2.2 auto的使用细则 2.3 auto不能推导的场景 3.基于范围的for循环(C11) 3.1 范围for的语法 3.2 范围for的使用方法 4.指针空值nullptr(C11) 4.1 C98中的指针空值 1.内联…...

五、多表查询-1.多表关系介绍

一、概述 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种&#xff1a; 一对多&a…...

用python做 网站论坛/整站优化包年

finalize 它是 Object 中的一个方法&#xff0c;如果子类重写它&#xff0c;垃圾回收时此方法会被调用&#xff0c;可以在其中进行资源释放和清理工作 将资源释放和清理放在 finalize 方法中非常不好&#xff0c;非常影响性能&#xff0c;严重时甚至会引起 OOM&#xff0c;从 …...

公司网站建设模板/百度搜索如何去广告

http://edu.163.com/10/1213/16/6NQ0FMHK00293KTO_3.html 三、经济学 经济学完全有资格排在第三位。学习经济学的人&#xff0c;不会搞经济&#xff01;我这里说的“搞经济”&#xff0c;涵义是很狭义的&#xff0c;就是不会挣钱&#xff0c;更不会赚钱。我本人就是学经济的&am…...

郑州见效果付费优化公司/武汉seo公司哪家专业

真的是大道至简&#xff0c;小问题大学问 双指针在数组中的应用 例题1&#xff1a;给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。&#xf…...

做网站后端的是什么部门/seo优化招聘

2019独角兽企业重金招聘Python工程师标准>>> 严格控制session过期方法 Session控制类 <?php /*** Session控制类*/ class Session{/*** 设置session* param String $name session name* param Mixed $data session data* param Int $expire 超时时间(秒…...

青海做网站找谁/北京seo服务商

本文最初发表在DigitalOcean的公共知识库中。我在这里对它进行了一些较小的编辑。介绍Python 3有许多内置的数据结构&#xff0c;包括元组、字典和列表。数据结构为我们提供了一种组织和存储数据的方法。collections模块能够帮助我们高效地填充和操作数据结构。在本教程中&…...

云网站功能/代刷网站推广

最近&#xff0c;网络和媒体都在狂轰乱炸一些新闻&#xff0c;从最早的西藏事件、5.12地震、瓮安事件、上海警察局事件、张家界爆炸事件等等&#xff0c;在这么新闻背后太多太多的东西让人回味与沉思&#xff0c;其实最简单的也是最重要的一个道理就是&#xff1a;当今社会的人…...