WebSocket基础


前言

关于websocket一点知识
JavaWebSocket实现简单实时聊天窗口


一、什么是WebSocket

WebSocket是一种能在单个TCP连接进行全双工通信的协议

二、关于WebSocket

1.特点

a.客户端和服务端完成一次握手即可建立持久性连接
b.服务端可以主动推送信息到客户端
c.协议标识符:ws和wss(加密)(类似http和https)如ws://localhost:8888
d.基于tcp协议实现容易,发送数据多样(文本,二进制)
e.无同源限制也就是没有跨域(服务端可以第一次的Origin请求字段来判断是否通过该请求)
#只使用http进行一次握手,只有一次http请求,如下图,一次连接,多次数据交互
在这里插入图片描述
在这里插入图片描述

2.与HTTP

同:
和http一样都是应用层的协议,但websocket是为了弥补http在持久性连接的不足
基于TCP协议(算得上是互补的兄弟)
异:
http是一个request对应一个response,websocket是建立连接后就可以随便发
http不能从服务端推送,而websocket可以(HTTP/2也具备服务器推送功能,但HTTP/2 只能推送静态资源,无法推送指定的信息)
http无状态,websocket应该有状态(无状态协议是指比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登录该网站,但是服务器并不知道客户关闭了一次浏览器)(没找到相关资料,有大佬知道的话希望解答一下)

3.应用场景

主要利用长连接和全双工通信的特点,建立连接后发送数据开销比http小
实时通信,多人游戏…(实时)

三、其他

1.没有websocket之前怎样获取服务端单方面发送数据

ajax轮询:不断请求服务端,有消息就返回,没有也返回
long poll:请求服务端,直到服务端有发消息了(阻塞),才返回
(就是浏览器一直请求服务端,看看有没有消息,有就返回)

2.心跳机制

WebSocket 可能进入某种半死不活的状态(连接断开/无法正常使用,但客户端和服务端都没有感知到)
设置心跳机制,客户端和服务端定时发送特定数据以检测对方是否存活
(有点像注册中心和服务之间的心跳机制)

3.websocket 和 socket

WebSocket 是应用层协议
Socket是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口.(简单来说,Socket是一层抽象,上接应用层,下接运输层(TCP/UDP))

4.连接鉴权

5.断线重连

四、参考

https://juejin.cn/post/7020964728386093093
https://www.runoob.com/html/html5-websocket.html
https://www.zhihu.com/question/20215561
https://baike.baidu.com/item/%E5%A5%97%E6%8E%A5%E5%AD%97/9637606?fromtitle=socket&fromid=281150&fr=aladdin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值