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()); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。