webService、webSocket、socket、http之间的区别

HTTP

HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接。

无状态:每次连接只处理一个请求,请求结束后断开连接。

无连接:对于事务处理没有记忆能力,服务器不知道客户端是什么状态。

以往实现即时通讯的手段:

轮询:客户端定时向服务器发送 Ajax 请求,服务器接到请求后马上返回响应信息并关闭连接。

长轮询:客户端向服务器发送 Ajax 请求,服务器接到请求后 hold 住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

长连接:在页面里嵌入一个隐蔵 iframe,将这个隐蔵 iframe 的 src 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。

Flash Socket:在页面中内嵌入一个使用了 Socket 类的 Flash 程序 JavaScript 通过调用此 Flash 程序提供的 Socket 接口与服务器端的 Socket 接口进行通信,JavaScript 在收到服务器端传送的信息后控制页面的显示。

keep-alive:在以前 HTTP 协议中所谓的 keep-alive connection 是指在一次 TCP 连接中完成多个 HTTP 请求,但是对每个请求仍然要单独发 header;另外,Keep-Alive也不能保证客户端和服务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持连接特性,否则会有意想不到的后果。

在实践过程中发现谷歌浏览器使用HTTP/1.1协议时请求头中总会带上Connection: keep-alive,另外通过httpclient使用HTTP/1.0协议去请求tomcat时,即使带上Connection: keep-alive请求头也保持不了长连接。如果HTTP/1.1版本的http请求报文不希望使用长连接,则要在请求头中加上Connection: close,接收到这个请求头的对端服务就会主动关闭连接。但是http长连接会一直保持吗?肯定是不会的。一般服务端都会设置keep-alive超时时间。超过指定的时间间隔,服务端就会主动关闭连接。同时服务端还会设置一个参数叫最大请求数,比如当最大请求数是300时,只要请求次数超过300次,即使还没到超时时间,服务端也会主动关闭连接。


webSocket

为什么需要webSocket

HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
在这里插入图片描述

其他特点包括:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。

WebSocket与HTTP的关系

相同点

  • 都是一样基于TCP的,都是可靠性传输协议。
  • 都是应用层协议。

不同点

  • WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
  • WebSocket是需要握手进行建立连接的。

联系
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

websocket是基于HTTP协议的,或者说借用了http的协议来完成一部分握手。为了实现websocket通信,需要用到http的Upgrade首部字段,告知服务器通信协议已发生改变:我要发起的是websocket协议。以达到握手的目的。

在这里插入图片描述

Socket

Socket 是操作系统提供的对于传输层(TCP / UDP)抽象的接口,是一个编程概念,而 Websocket 与 HTTP 一样是一个成文的互联网协议。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

在这里插入图片描述

当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

webService

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

跨编程语言和跨操作平台:就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!

跨操作系统平台:则是指服务端程序和客户端程序可以在不同的操作系统上运行。

远程调用:就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。

从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。

WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。

WebService平台技术

XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

XML:

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。

SOAP(Simple Object Access Protocol简单对象访问协议):

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。

SOAP协议 = HTTP协议 + XML数据格式

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

WSDL:

好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7内存占用过高怎么处理

电脑的内存空间取决了电脑的运行流畅度,时间一久内存就会爆满导致占用过高这样就会使电脑变得延迟,那么win7内存占用过高怎么处理呢?下面就一起来看看解决方法吧。 win7内存占用过高怎么处理: 方法一、禁用自动更新 1、点击“开始”打开“…

OSI七层模型传输过程的通俗理解

转自:http://bbs.clnchina.com.cn/thread-1250443-1-1.html 1.OSI七层模型划分。 从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 分层功能应用层网络服务与最终用户的一个接口(可理解为人机交互界面&#xf…

谷歌浏览器怎么设置中文

谷歌浏览器是当下最受欢迎的面向全世界用户开源的搜索浏览器,所以有很多不同语言的版本,对于用户来说,其他语言版本的谷歌浏览器要怎么设置成自己看得懂的中文版本呢?简单几个步骤分享给大家。 谷歌浏览器怎么设置中文 1、首先打开谷歌浏览…

软件开发之常见前端安全漏洞

原标题:软件开发之常见前端安全漏洞 软件开发完成后,在Web服务器在投入使用之前,应该确保服务器是相对安全地。保证服务器相对安全地前提是,要充分了解影响Web系统安全。 1、跨站脚本(XSS)漏洞跨站脚本攻击…

win7系统5分钟就会自动注销的解决教程

我们在电脑使用的过程中,有时候会遇到过5分钟就自动注销的情况。一般来说都是因为电脑中了病毒,启动程序遭到了恶意修改,或者系统启动文件因为某些操作删除或损坏了,就此问题,下面小编介绍win7系统5分钟就会自动注销的…

win7窗口颜色没有透明的开启教程

win7的个性化中可以将窗口颜色设置为透明能够让我们的界面视觉效果更加美观舒适。但是有的朋友反映他的win7窗口颜色中没有透明,win7窗口颜色没有透明怎么开启?其实透明效果不是颜色,需要勾选透明选项框才可以开启,下面就一起来看一下win7窗…

Eclipse中的快捷键

熟悉 Ecplise的 快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事情。 编辑类快捷键 按键作用Ctrl1快速修复(最经典的快捷键,可以解决很多问题,比如 import 类、try catch 包围等)CtrlShiftF格式化当前代…

Win10如何设置IE为默认浏览器

Win10如何设置IE为默认浏览器?很多朋友可能还不知道,下面2345软件大全小编给你分享下解决办法。 Win10如何设置IE为默认浏览器 第一步:首先打开Win10控制面板,然后再点击进入“程序”,如图所示。 Win10如何设置IE为默认浏览器…

修改el-popover和el-select样式

如图el-popover弹框和el-select下拉项的的容器是div#app之外的,所以在scoped作用域内使用>>>或/deep/修改样式无效。虽然可以使用全局样式修改,但是会造成所有页面组件样式改变。 1、修改el-select选项样式的解决办法: Popper-appen…

UC浏览器设置允许访问剪贴板网址的方法

uc浏览器是一个大家都很喜欢使用的搜索服务软件,很多用户都会使用这款软件进行搜索,还有很多用户会使用这款软件进行搜索,用户可以将自己想要的网址粘贴在页面上,方便用户进行搜索使用,用户在使用UC浏览器的时候会发现…

Echarts图表插件资源

https://www.makeapie.com/explore.html

win7旗舰版太卡怎么办

相信不少小伙伴在使用win7旗舰版系统久之后都容易遇到win7旗舰版太卡的问题,比较影响我们系统的正常使用。那么win7旗舰版太卡怎么办?怎么解决win7旗舰版卡的问题?下面小编就教下大家win7旗舰版太快的解决方法。 win7旗舰版太卡怎么办 方法一:如果是…

自定义的全局公共样式

/* by zuoluo 2021-08-06 *//* 全局padding、border、margin、font设置 */html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, a, address, em, img, ol, ul, li, fieldset, form, label, legend, table, tbody, tfoot, thead, tr, th, td, i, b, s {mar…

windows7电脑删除文件特别慢怎么回事

在使用电脑的过程中,我们经常需要给电脑清理文件释放些内存空间,提高电脑的运行速度。不过有网友说自己的win7电脑删除文件特别慢,删除文件要很久的问题,windows7电脑删除文件特别慢怎么回事?删除文件比较慢的原因可能是系统某些…

React和Vue的Chrome扩展工具安装

1、vue--devtools简单安装教程 https://blog.csdn.net/weixin_43941029/article/details/105867585 2、react-devtools简单安装教程 https://blog.csdn.net/weixin_41217541/article/details/105686676

windows7电脑怎么永久关闭广告

windows7电脑怎么永久关闭广告?一些用户在使用win7电脑的时候发现电脑浏览器网页右下角经常弹出烦人的广告窗口,影响到自己的使用,下面就和大家讲讲windows7电脑永久关闭广告的方法,感兴趣的用户请来看看吧。 windows7电脑怎么永久关闭广告…

vue项目使用electron打包成桌面应用

打包流程详情步骤: 1、准备工作: a、win7系统则确保node版本在v12以上,electron-builder对系统或版本有要求; b、项目路径不使用中文; c、使用淘宝镜像命令代替npm管理工具 npm install -g cnpm --registryhttps://…

搜狗高速浏览器怎么设置鼠标手势显示动作提示?设置方法是什么

搜狗浏览器是一款日常经常会使用的浏览服务软件,用户可以使用手机获取自己想要的浏览内容,各种浏览操作都可以快速掌握,但是使用浏览器的时候会出现各种动作提示,这样会方便用户的操作,这种动作操作设置以后&#xff0…

360浏览器播放视频出错崩溃该怎么处理

我们经常会直接在浏览器网页中打开视频网页进行观看视频,非常方便。但是最近有用户跟小编反应说自己每次打开360浏览器播放视频就出错发生浏览器崩溃的现象。这该怎么办?下面小编就来给大家分析分析。 一、修复浏览器 1、打开360浏览器,然后点击右上方…

win7如何启动蓝牙的设备添加到计算机

在使用win7系统的时候,我们都会将多种不同类型的蓝牙设备如移动电话、无线耳机以及无线键盘添加到计算机里面,方便我们使用。那想要把启动蓝牙的设备添加到计算机,那么win7如何启动蓝牙的设备添加到计算机呢?下面就以win7旗舰版为例&#xf…