说明:这里是单机的websocket,没有部署到服务器,本人开了360浏览器和chrome来分别模拟两个买家客户端和商家客户端。
模拟对象暂时是只有一个接受方(consumer),许多个发送方(producer)
1、先给maven上个依赖
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<!-- web socket -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>${
spring.version}</version>
</dependency>
2、先上个小红点的效果图
这说明了有三条未处理的消息
3、基本的思路(简单实现)
写websocket需要定义好一个服务类
@ServerEndpoint(value = "/ws")
public class WsServer {
不了解@ServerEndpoint这个注解的同学戳这里或者百度
了解的朋友看到我的value就知道我的这个小server是只有一个房间的,模拟的接收方和发送方都在一个房间里进行交流,而需要如何做到多房间各聊各的,就需要在这个value上多加一些参数,比如 value= “/ws/room1”, value = “/ws/room2”,这样子不同的用户在new websocket时候就可以通过不同的value进入不同的房间进行通信。(扯远了~)
4、话不多说上代码
定义几个存储类
// map存储userSession,msg将会广播给这些user,key存储着发送方的id和身份(user or admin ,也就是买家和商家)
private static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
// 用一个list来存储string类型的简单消息
private static final List<String> msgList = new ArrayList<>();
// 自己的一个存储使用当前session的用户信息类
private Client client = ClientThreadLocal.get();
核心方法
@OnOpen
public void connect(Session session, EndpointConfig config){
System.out.println( client.getClientName() + " has connected");
// 连接后将用户的类型和id传入map中保存
sessionMap.