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. 前端代码