1.说明
关于websocket的介绍,有许多的文章都讲的很详细也很好,这里就不再赘述。这里提供websocket的java代码简单实现,包括js的客户端和后台java的服务端,后端使用TomcatWebsocket和SpringWebSocket两种方式,实现tcp连接和通信,以供大家学习参考。
2.环境准备
后端使用SpringBoot加Maven构建项目,前端直接使用html加js实现。请先准备一个能够跑起来的SpringBoot后端项目。
添加websocket的maven依赖(pom.xml):
<!-- webSocket的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.7.12</version>
</dependency>
3.TomcatWebsocket后端代码
3.1 websocket配置类
将这个配置类加入项目中。
/**
* 配置后会自动注册所有的 @ServerEndpoint,一定不要忘记这个配置类
* @author 广大网友
*/
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
3.2 websocket服务端代码
@ServerEndpoint注解添加服务端路径 path ,客户端在建立连tcp接时就使用:var ws = new WebSocket(“ws://你的后台项目地址/path”); 建立连接。需要携带参数时:var ws = new WebSocket(“ws://你的后台项目地址/path?accessToken=某某”) 建立连接。
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.List;
/**
* TomcatWebSocket服务端
*
* @author 别人家的孩子e
*/
@Component
@ServerEndpoint("/test/tomcatWebsocket")
public class WebSocketEndPoint {
/**
* 注意,多个会话会公用这一个num对象
*/
private static Integer num = 1;
/**
* tcp连接建立时触发
*/
@OnOpen
public void onOpen(Session session) throws IOException {
System.out.println("会话:" + session.getId() + "的tcp连接已建立。");
//获得路径中携带的参数,通常为认证token
List<String> accessToken = session.getRequestParameterMap().get("accessToken");
//注意判路径中是否有携带参数
if (accessToken != null && accessToken.size() > 0){
String token = accessToken.get(0);
System.out.println("会话人token:" + token);
}else {