import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.vo.UnifyQuestionVo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
@ServerEndpoint(value = "/send/questionSocket/{uid}")
@Component
@Slf4j
public class QuestionSocketServer {
@Resource
RedisTemplate redisTemplate;
@Resource
BaseCommonService baseCommonService;
//concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。
private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();
//收到客户端信息后,根据接收人的username把消息推下去或者群发
@OnMessage
public void onMessage(String message) throws IOException {
log.info("接收到的消息数据是:{}",message);
//一下是接收到消息之后的处理
UnifyQuestionVo questionVo= JSON.parseObject(message, UnifyQuestionVo.class);
MessageHandleFactory handleFactory = new MessageHandleFactory();
MessageFactoryService questionHandle = handleFactory.getHandle(questionVo.getType());
questionHandle.questionHandle(questionVo);
}
//错误时调用
@OnError
public void onError(Session session, Throwable throwable){
log.error("发生错误了");
throwable.printStackTrace();
}
//建立连接成功调用
@OnOpen
public void onOpen(Session session,@PathParam(value = "uid") String uid){
sessionPools.put(uid, session);
}
//关闭连接时调用
@OnClose
public void onClose(@PathParam(value = "uid") String uid){
sessionPools.remove(uid);
}
//发送消息,对接收的消息进行回复
public void sendMessage(Session session, String message) throws IOException {
if(session != null){
synchronized (session) {
session.getBasicRemote().sendText(message);
}
}
}
//给指定用户发送信息
public void sendInfo(String uid, String message){
Session session = sessionPools.get(uid);
try {
sendMessage(session, message);
}catch (Exception e){
e.printStackTrace();
}
}
}
前端
var websocket;
websocket = new WebSocket("ws://localhost:8085/rykj-large/webSocket/"+uid);
data["uid"] = "u001";
data["problemContent"] = "11111111";
data["roleId"] = "02064b1ca7a2247b771967e056b1d278";
data["type"] = 0;
websocket.send(JSON.stringify(data));
可以参考:
https://gitee.com/shenzhanwang/Spring-websocket?_from=gitee_search