WebSocket协议介绍干货

 2023-12-21  阅读 2  评论 0

摘要:网站依托的网站服务器是什么?虚拟服务器云服务器如何选? 网站成为互联网时代各行各业的必需品,而网站的建设依托于网站服务器。网站服务器,顾名思义,就是在互联网数据中心中存放网站的服务器。 WebSocket实现了客户端与服务器之间的长连接,这样服务器可以主动推送消息给

WebSocket协议介绍干货

网站依托的网站服务器是什么?虚拟服务器云服务器如何选?

网站成为互联网时代各行各业的必需品,而网站的建设依托于网站服务器。网站服务器,顾名思义,就是在互联网数据中心中存放网站的服务器。

WebSocket实现了客户端与服务器之间的长连接,这样服务器可以主动推送消息给客户端,有非常丰富的使用场景。如果没有WebSocket协议,要想实现长连接,就需要采用Comet的方式,这种方式就是采用客户端定时http轮询或者iframe流,以此来保证一个长连接。

Comet的缺点:

客户端与服务器采用的还是http协议,双方需要频繁地通讯,这样对于服务器来说性能损耗很大。

http协议来做为长连接,网路传输效率相对较低。

WebSocket协议介绍

Websocket协议主要分为两个部分:握手和数据传输。特别要提到的是,WebSocket在握手阶段使用的是http协议.

 

Websocket

WebSocket握手

客户端建立连接时,通过http发起请求报文。在请求头中,会有如下这些报文,Sec-WebSocket-Key用于安全校验,Sec-WebSocket-Key的值是随机生成的base64编码字符串。

Upgrade:websocket

Connection:Upgrade

Sec-WebSocket-Key:字符串

#指定子协议和版本号

Sec-WebSocket-Protocol:chat,superchat

Sec-WebSocket-Version:13

服务器收到字符串以后,与服务器生成的字符串相连接,形成新的字符串,然后新的字符串会进行sha1散列算法和base64编码,最后返回给客户端.

服务端处理完成以后,生成相应报文。报文告知客户端更新应用层协议为WebSocket协议。

Upgrade:websocket

Connection:Upgrade

Sec-WebSocket-Accept:字符串

Sec-WebSocket-Protocol:chat

客户端接收到服务端的响应报文以后,会对Sec-WebSocket-Key进行校验,校验成功以后,会开始数据传输。

WebSocket与http协议的比较优势:

客户端与服务端只需要建立一个tcp连接。

WebSocket服务端可以主动推送数据到客户端,这比http的请求相应模式更有优势。

WebSocket的协议头更轻量,减少了不必要的数据传输。

WS和WSS

WebSocket可以使用ws或wss来作为统一资源标志符,类似于HTTP或HTTPS。其中,wss表示在TLS之上的WebSocket,相当于HTTPS。默认情况下,WebSocket的ws协议基于Http的80端口;当运行在TLS之上时,wss协议默认是基于Http的443端口。说白了,wss就是ws基于SSL的安全传输,与HTTPS一样样的道理。所以,如果你的网站是HTTPS协议的,那你就不能使用ws://了,浏览器会block掉连接,和HTTPS下不允许HTTP请求一样.

如果你的服务是基于https的,那么客户端就需要使用WSS去进行连接。

使用客户端使用WSS连接不能使用IP的方式,需要使用域名进行连接。

使用WSS需要使用https连接,这并不是协议本身的限制,实际上是由于低版本谷歌浏览器和firefox浏览器的安全机制造成的。

Socket.io

这个库,针对客户端和服务端使用WebSocket分别进行了封装,提供了简洁方便的API。

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/80008.html

发表评论:

验证码

管理员

  • 内容1196554
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0116秒, 内存占用356.93 KB, 访问数据库18次