【WebSocket】协议详解

目录

简介

一、WebSocket是什么?

二、使用WebSocket

1.WebSocket工作原理

        1.1 握手(建立连接)

        1.2 数据传输

2.WebSocket

        2.1 事件

        2.2 方法

        2.3 属性 

3.WebSocket优点

4.WebSocket的使用场景


简介

        websocket是html5提供的一种浏览器与服务器进行全面双工通讯的网络技术,是基于TCP传输的应用层协议


一、WebSocket是什么?

        WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。

        http是一种无状态,无连接,单向的应用层协议,它采用了请求/响应模型,通信请求只能由客户端发起,服务端对请求做出应答处理。这样的弊端显然是很大的,只要服务端状态连续变化,客户端就必须实时响应,都是通过javascript与ajax进行轮询,这样显然是非常麻烦的,同时轮询的效率低,非常的浪费资源(http一直打开,一直重复的连接)。

        于是就有了websocket,它是一种全面双工通讯的网络技术,任意一方都可以建立连接将数据推向另一方,websocket只需要建立一次连接,就可以一直保持

二、使用WebSocket

1.WebSocket工作原理

        1.1 握手(建立连接)

                web浏览器和服务器都必须使用websocket来建立维护连接,也可以理解为HTTP握手 (handshake)和TCP数据传输

  1. 浏览器向http一样发起一个请求,等待服务器响应
  2. 服务器返回握手响应,告诉浏览器将后续的数据按照websocket的制定格式传输过来
  3. 服务器接收到了之后,服务器与浏览器之间连接不中断,此时连接已经是双工的了
  4. 浏览器和服务器由任何需要传输的数据时使用长连接来进行数据传递;

        这里说它是HTTP握手,是因为浏览器和服务器在建立长连接的握手过程是按照HTTP1.1的协议发送的,有Request,Request Header, Response, Response Header。但是不同的Header里面的字段是有特定含义的。

        说它是TCP传输,主要体现在建立长连接后,浏览器是可以给服务器发送数据,服务器也可以给浏览器发送请求的。当然它的数据格式并不是自己定义的,是在要传输的数据外层有ws协议规定的外层包的。

        1.2 数据传输

                一旦WebSocket客户端、服务端建立连接后,后续的操作都是基于数据帧的传递。这样做有几个好处:

                     1.数据可以进行分片传输,每条消息可能被切分成多个数据帧,这样就不用考虑数据大小导致的长度标志位不足够的情况。

                ps :FIN=1表示当前数据帧为消息的最后一个数据帧,此时接收方已经收到完整的消息,可以对消息进行处理。FIN=0,则接收方还需要继续监听接收其余的数据帧;        

                     2. 和http的chunk一样,可以边生成数据边传递消息,即提高传输效率;

2.WebSocket

        2.1 事件

        ***@ServerEndpoint这个注解用来标记一个类是 WebSocket 的处理器。

  1. Open(@onOpen):服务器响应websocket的请求会触发
  2. Message(@onMessage):当消息被接收时会触发
  3. Close(@onClose):当连接关闭时会触发,关闭之后,服务端和客户端就不能发消息了
  4. Error(@onError):发生错误会触发,并会告诉你错误的原因

        2.2 方法

  1. send():一旦服务器与客户端建立连接(open)之后,就可以使用其发送消息了,发送的消息都是二进制格式的
  2. close(): 关闭连接

        2.3 属性 

  1. readyState:WebSocket通过readyState(只读)来传达连接状态,它会随着连接状态的改变而改变,由四个值来表示:

                WebSocket.CONNECTING = 0 :连接正在进行

                WebSocket.OPEN = 1 :连接已经建立

                WebSocket.CLOSING = 2 :连接正在进行关闭握手

                WebSocket.CLOSED = 3 :连接已经关闭

     2.bufferedAmount:用于检查已经进入队列但还未传输的数据大小

     3.Protocol:Protocol让服务到知道客户端使用WebSocket的协议,两者使用的协议不同的话,整个属性都是空的。

3.WebSocket优点

        1.减少请求费时费资源:是真正的全双工方式,建立连接后,服务器与客户端时完全对等的,可以相互请求,减少了不必要的网络请求时间损耗和网络流量;

        2.更持久:websocket协议通过第一个request建立TCP连接后,只要不主动关闭,就能一直保持连接状态交换数据;

        3.服务端可以主动向客户端发送消息;

4.WebSocket的使用场景

        websocket的使用场景: 社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等 需要高实时的场景。

  • 7
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。在WebSocket协议之前,浏览器与服务器之间的通信通常都是基于HTTP请求和响应的,也就是说,客户端向服务器发送请求,服务器返回响应,然后连接就被断开了。这种方式不够实时、效率也不高。 WebSocket协议通过在HTTP协议升级时使用"Upgrade"头来实现握手。握手成功后,连接就从HTTP协议升级到了WebSocket协议,从而在单个TCP连接上实现了全双工通信。 在Java中,可以使用Java API for WebSocket(JSR 356)来实现WebSocket协议。下面是基于Java实现WebSocket协议的步骤: 1. 创建自己的Endpoint类,继承javax.websocket.Endpoint类,实现onOpen、onMessage、onError和onClose方法。 2. 在onOpen方法中,创建Session对象,将它加入到某个集合中,以便在之后向客户端发送消息时使用。 3. 在onMessage方法中,处理客户端发送的消息,并向所有客户端发送消息。 4. 在onError方法中,处理异常。 5. 在onClose方法中,将Session从集合中移除。 6. 创建ServerEndpointConfig对象,并将Endpoint类和URI绑定在一起。 7. 创建WebSocket服务器,将ServerEndpointConfig对象传递给它。 8. 启动WebSocket服务器,等待客户端连接。 9. 客户端连接成功后,服务器会自动调用Endpoint的onOpen方法,表示连接已建立。 10. 客户端发送消息时,服务器会自动调用Endpoint的onMessage方法,处理消息。 11. 客户端关闭连接时,服务器会自动调用Endpoint的onClose方法,清除Session对象。 12. 服务器发生异常时,会自动调用Endpoint的onError方法,处理异常。 以上是基于Java实现WebSocket协议的大致步骤。需要注意的是,WebSocket协议中的数据是以帧的形式进行传输的,而不是HTTP协议中的请求和响应。因此,在编写WebSocket应用程序时,需要特别注意帧的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值