springBoot 的webSocket 使用及推送服务

[toc]

工程链接: https://github.com/youximao/webSocket.git

1. websocket

本项目可以运行,使用在spring boot,当前主流的浏览器是支持websocket的

2. java实现

spring4的,(无法运行 当作介绍原理来看)

@OnOpen
public void init(Session session){}
示当此端点建立新的连接时调用此方法

@OnMessage
在连接建立后处理一些或者所有的入站消息
Java WebSocket API
中的消息事件伴随的信息是 Session 对象(它表示消息抵达时的连接)、EndpointConfig 对象、打开阶段握手中从匹配入站 URI 过程中获取的路径参数以及最重要的消息本身。
信息类型三种:文本消息、二进制消息(用 byte[] buteBuffer处理)或 Pong 消息
@OnMessage
public void send(// 参数可以是  session 和三种信息类型  String  byte[] buteBuffer,){}
返回值是String、byte[]或者ByteBuffer

@OnError
其可以处理 WebSocket 实现处理入站消息时发生的任何错误
public void errorHandler(Throwable t) {
// log error here
}

@OnClose
关闭时做的事情
public void goodbye(CloseReason cr) {
// log the reason for posterity
// close database connection
}


springBoot版(可用)

  1. 要设置一下配置
@Configuration
@EnableWebSocketMessageBroker
public class sockConfig extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
            stompEndpointRegistry.addEndpoint("/my-websocket").withSockJS(); // 配置一下注册信息
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        super.configureMessageBroker(registry);
        registry.enableSimpleBroker("/topic"); // 配置一下代理的
    }
}

// 然后就是使用注解
@MessageMapping(“/test”) // 来监听客户端的发送的url

// 向客户端发送请求
simpMessagingTemplate.convertAndSend(“/topic/send”,string); 和@SendTo 广播发送一样

simpMessagingTemplate.convertAndSendToUser(user, destination, payload);//将消息推送到固定的用户订阅路径中,类似@SendToUser

 @MessageMapping("/test") // 监听客户端发送的test路径
    public void sendMessage(String string){
        System.out.println(string);
        simpMessagingTemplate.convertAndSend("/topic/send",string);//广发给订阅/topic/send的客户端
    }

前端

链接文件一定要加

<script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script>
<script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

js代码


function connect() { // 先注册 var socket = new SockJS('/my-websocket'); //后台配置文件里面配置的注册信息 stompClient = Stomp.over(socket);//2 stompClient.connect({}, function(frame) {//3 setConnected(true); console.log('开始进行连接Connected: ' + frame); //监听 stompClient.subscribe('/topic/send', function(respnose){ showResponse(respnose);//消息处理函数 }); }); } // stompClient.subscribe 是用来注册监听/topic/send的 当你后台通过sendTo 这个/topic/send就可以了 // 向浏览器发送信息,后台有这个监听test的处理函数 stompClient.send("/test", {}, name);

消息格式

WebSocket支持文本和二进制数据传输,浏览器如果接收到文本数据,会将其转换为DOMString 对象,如果是二进制数据或Blob 对象,可直接将其转交给应用或将其转化为ArrayBuffer,由应用对其进行进一步处理。
// 接收数据
wss.onmessage = function(msg) {
if(msg.data instanceof ArrayBuffer) {
// arraybuffer处理方式
} else {
// text 的处理方式
}
}


评论

《“springBoot 的webSocket 使用及推送服务”》 有 1 条评论

  1. […] 以前的博客能帮你了解一下websockethttps://boke.maoxiaomiyy.com/?p=971 要想不使用sockjs 就只要把原来的stompEndpointRegistry.addEndpoint("/my-websocket").withSockJS();中.withSockJS()去掉即可 […]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注