WebSocket

导读:本篇文章讲解 WebSocket,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

实现方式

导入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

WebSocketConfig

package com.yang.config;

/**
 * @Author: chen yang
 * @Date: 2021/12/9 12:20
 * @Description: 通过这个配置 Springboot 才能去扫描后面关于websocket的注解
 */
@Configuration
@EnableWebSocket
public class WebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpoint(){
        return new ServerEndpointExporter();
    }
}

WsServerEndpoint

package com.yang.config;

/**
 * @Author: chen yang
 * @Date: 2021/12/9 12:24
 * @Description:
 */
@ServerEndpoint("/myWs")
@Component
public class WsServerEndpoint {

    /**
     * 连接成功
     * @param session
     */
    @OnOpen
    public void onOpen(Session session) throws IOException {
        session.getBasicRemote().sendText("连接成功");
        System.out.println("连接成功  "+session);
    }

    /**
     * 关闭连接
     * @param session
     */
    @OnClose
    public void onClose(Session session) throws IOException {
        session.getBasicRemote().sendText("关闭连接");
        System.out.println("关闭连接  "+session);
    }

    /**
     * 接受到消息
     * @param msg
     * @return
     */
    @OnMessage
    public String onMgs(String msg){
        System.out.println("接受的消息:"+msg);
        return "消息已接受: "+ msg;
    }

    /**
     * 错误信息
     * @param session
     */
    @OnError
    public void onError(Session session, Throwable error){
        System.out.println(session+" ERROR!  "+error);
    }
}

说明

这里有几个注解需要注意一下,首先是他们的包都在 javax.websocket 下。并不是 spring 提供的,而 jdk 自带的,下面是他们的具体作用。

  1. @ServerEndpoint

  2. 通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是 8080,而这个注解的值是 ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用

  3. @OnOpen

  4. 当 websocket 建立连接成功后会触发这个注解修饰的方法,注意它有一个 Session 参数

  5. @OnClose

  6. 当 websocket 建立的连接断开后会触发这个注解修饰的方法,注意它有一个 Session 参数

  7. @OnMessage

  8. 当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值

  9. @OnError

  10. 当 websocket 建立连接时出现异常会触发这个注解修饰的方法,注意它有一个 Session 参数

另外一点就是服务端如何发送消息给客户端,服务端发送消息必须通过上面说的 Session 类,通常是在@OnOpen 方法中,当连接成功后把 session 存入 Map 的 value,key 是与 session 对应的用户标识,当要发送的时候通过 key 获得 session 再发送,这里可以通过 *session.getBasicRemote().sendText(*)** 来对客户端发送消息。

java WebSocke的那些错误 – 简书

发送消息

WebSocket

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95918.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!