websocket实现协同在线编辑
一、设计思路
图片:
目前使用的是线程的形式去调用发送信息方法,后期可以采用mq的形式去做处理。
代码在ruoyi-vue的基础上进行改动的
二、代码实现
1、实体类
/**
* 文章实体类
**/
@Data
@Document(collection = "article") //指定要对应的文档名(表名)
@Accessors(chain = true)
@AllArgsConstructor
public class Article {
@Id
private String id;//文章主键
private String articleName; //文章名
private String content; //文章内容
private List<String> userIds;//用户信息
}
2、Mapper层
@Repository
public class ArticleMapper {
@Autowired
MongoTemplate mongoTemplate;
//根据id查询文章
public Article findById(String id) {
Article articles = mongoTemplate.findById(id, Article.class, "article");
return articles;
}
//存入文章
public Article save(String data,String id){
Article article = new Article(id, "article", data, null);
mongoTemplate.save(article,"article");
return article;
}
}
3、ArticleSocketServer
/**
* Created with IntelliJ IDEA.
*
* @Author: fulin
* @Date: 2023/01/06/11:28
* @Description:
*/
@ServerEndpoint("/article/{articleId}/{userId}")
@Component
public class ArticleSocketServer {
/**
* 存放文章集合 key为文章id value 为map
* value集合 以用户id为key value为ArticleSocketServer对象
*/
public static ConcurrentHashMap<String, ConcurrentHashMap<String, ArticleSocketServer>> articleMap = new ConcurrentHashMap<>();
/**
* 因为无法注入bean对象 所以通过ApplicationContext获取bean
* @return
*/
private ArticleMapper getArticleMapper() {
return SpringContextUtil.getBean(Art