[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版(可用)
- 要设置一下配置
@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 的处理方式
}
}
发表回复