WebSocket是基于tcp的一种全双工通信的协议,它在建立连接的时候需要使用http协议,之后开始连接之后会独立出来。通过,http的每次连接都需要建立在url之上,但是webSocket只需要一个url来建立握手。常见的webSocket有多种实现方式,如SpringBoot+tomcat,或者是springboot+netty
使用方式
以下的代码均是基于Spring+tomcat
首先会在socket那里协商ServerEndPoint注解,然后注解出几个方法,如@BeforeHandshake, @OnOpen, @OnClose, @OnMessage 等等,然后在这些注解方法当中实现响应的业务逻辑。之后在前端页面开启socket即可。
对于后台来说,每个链接都是一个session,一般我们会把每个用户的session保留下来,以此来实现一对一和一对多的通信
1. 后台代码
@Configuration public class AppConfiguration { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } } @Component @ServerEndpoint("/webSocket/{page}") public class TomcatSocket { private final static Logger LOG = LoggerFactory.getLogger(TomcatSocket.class); @OnOpen public void open(@PathParam("page") String page, Session session) { } @OnClose public void close(@PathParam("page") String page, Session session){ } @OnMessage public void receiveMessage(@PathParam("page") String page, Session session, String message) throws IOException { LOG.info("接受到用户{}的数据:{}",session.getId(),message); } @OnError public void error(Throwable throwable){ try { throw throwable; } catch (Throwable e) { LOG.error("未知错误"); } } }
4.0.0 cn.wxxlamp YeautyTest 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-websocket
2. 前端代码