SpringBoot中如何使用WebSocket呢?
下文笔者讲述SpringBoot中使用WebSocket的方法分享
学习完本篇之后,你将掌握WebSocket的i基本用法,如下所示
学习完本篇之后,你将掌握WebSocket的i基本用法,如下所示
websocket简介
WebSocket是在单个TCP连接上进行全双工通信的协议
WebSocket通信协议于2011年被IETF定为标准RFC 6455
由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单
允许服务端主动向客户端推送数据
在WebSocket API中
浏览器和服务器只需要完成一次握手
两者之间就直接可以创建持久性的连接,并进行双向数据传输
Springboot实现websocket
springboot自带websocket
我们只需使用几个简单的注解
就可以实现websocket的功能
例:SpringBoot实现websocket
//定义一个websocket启动类
//通普通springboot一样
package testspringboot.test7websocket;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication
@PropertySource(value = "test7.properties")
public class Test7Main {
public static void main(String[] args) {
SpringApplication.run(Test7Main.class, args);
}
}
//编写一个websocket的配置类
package testspringboot.test7websocket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
//配置文件中配置端口test7.properties
server.port=80
//主逻辑都放到@ServerEndpoint标签注释的类里
//此类类似controller的功能
//可以使用4种注解处理业务:
@OnOpen:处理客户端的连接;
@OnClose:处理客户端断开;
@OnError:处理故障错误;
@OnMessage:处理具体消息
有三种消息类型
String类型
ByteBuffer类型
PongMessage类型
同一消息类型类里不能出现多次;
另外可以通过Session对象设置属性或发送数据
session.getUserProperties()存取属性
session.getBasicRemote() 或 session.getAsyncRemote()
可进行同步异步发送数据
处理类
package testspringboot.test7websocket;
import java.io.IOException;
import java.nio.ByteBuffer;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.PongMessage;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;
@Component
@ServerEndpoint(value = "/websockettest/{name}")
public class WebSocketHandler {
@OnOpen
public void onOpen(@PathParam("name") String name, Session session) throws IOException {
System.out.println("onOpen:" + name);
session.getUserProperties().put("name", name);
}
@OnClose
public void onClose(@PathParam("name") String name, Session session) throws IOException {
System.out.println("onClose:" + name);
System.out.println(session.getUserProperties().get("name") + "关闭了");
}
@OnError
public void onError(Session session, Throwable error) {
System.out.println("onERROR");
error.printStackTrace();
}
@OnMessage
public void textMessage(Session session, String msg) {
System.out.println("收到:" + msg);
try {
session.getBasicRemote().sendText("hello");
} catch (IOException e) {
e.printStackTrace();
}
}
@OnMessage
public void binaryMessage(Session session, ByteBuffer msg) {
System.out.println("Binary message: " + msg.toString());
}
@OnMessage
public void pongMessage(Session session, PongMessage msg) {
System.out.println("Pong message: " + msg.getApplicationData().toString());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


