WebSocket入门

文档背景

闲来无事,学一下WebSocket,看看网站中的消息功能是如何实现的。

思考:像这样的消息功能怎么实现? 如果网页不刷新,服务端有新消息如何推送到浏览器?
解决方案,采用轮询的方式。即:通过js不断的请求服务器,查看是否有新数据,如果有,就获取到新数据。
这种解决方法是否存在问题呢?
当然是有的,如果服务端一直没有新的数据,那么js也是需要一直的轮询查询数据,这就是一种资源的浪费。
那么,有没有更好的解决方案? 有!那就是采用WebSocket技术来解决.

1、什么是WebSocket?

WebSocket 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助
HTTP请求完成。 WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术。 它是一种在单个TCP连
接上进行全双工通讯协议。Websocket通信协议与2011年倍IETF定为标准RFC 6455,Websocket API被W3C定为
标准。

全双工和单工的区别?

  • 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
  • 单工、半双工(Half Duplex),所谓半双工就是指一个时间段内只有一个动作发生,举个简单例子,一条窄窄的马路,同时只能有一辆车通过,当目前有两辆车对开,这种情况下就只能一辆先过,等到头儿后另一辆再开,这个例子就形象的说明了半双工的原理。早期的对讲机、以及早期集线器等设备都是基于半双工的产品。随着技术的不断进步,半双工会逐渐退出历史舞台。

2、http与websocket的区别

2.1、http

http协议是短连接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开链接。
在这里插入图片描述

2.2、websocket

WebSocket协议是一种长链接,只需要通过一次请求来初始化链接,然后所有的请求和响应都是通过这个TCP链接进行通讯。
在这里插入图片描述

3、快速入门

3.1、注解说明

  • @ServerEndpoint(“/websocket/{uid}”)
    • 申明这是一个websocket服务
    • 需要指定访问该服务的地址,在地址中可以指定参数,需要通过{}进行占位
  • @OnOpen
    • 用法:public void onOpen(Session session, @PathParam(“uid”) String uid) throws
      IOException{}
    • 该方法将在建立连接后执行,会传入session对象,就是客户端与服务端建立的长连接通道
    • 通过@PathParam获取url申明中的参数
  • @OnClose
    • 用法:public void onClose() {}
    • 该方法是在连接关闭后执行
  • @OnMessage
    • 用法:public void onMessage(String message, Session session) throws IOException {}
    • 该方法用于接收客户端发来的消息
    • message:发来的消息数据
    • session:会话对象(也是通道)
  • 发送消息到客户端
    • 用法:session.getBasicRemote().sendText(“你好”);
    • 通过session进行发送。

4、测试

在线工具:https://www.bejson.com/httputil/websocket/

代码Demo: https://gitee.com/yi-yunlong/itcast-websocket

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值