赞
踩
作者主页:编程指南针
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助
收藏点赞不迷路 关注作者有好处
文末获取源码
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
随着社交媒体的普及和校园生活的丰富多彩,校园交友平台成为了大学生活中的重要组成部分。该项目旨在为校园内的学生提供一个安全、便捷、互动性强的交友平台,帮助他们结识新朋友、扩大社交圈子,并且通过共同兴趣爱好的匹配,促进更深层次的交流和互动。
项目技术栈:
前端:Vue.js、Element UI、HTML5、CSS3、JavaScript等
后端:SpringBoot、MySQL、MyBatis、Spring Security等
前台主要功能:
后台主要功能:
-
- /**
- * @author websocket服务
- */
- @ServerEndpoint(value = "/imserver/{uid}")
- @Component
- public class WebSocketServer {
- private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
- /**
- * 记录当前在线连接数
- */
- public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
-
- @Resource
- IUserService userService;
- @Resource
- IImService imService;
-
-
- private static IUserService staticUserService;
- private static IImService staticImService;
-
- // 程序初始化的时候触发这个方法 赋值
- @PostConstruct
- public void setStaticUser() {
- staticUserService = userService;
- staticImService = imService;
- }
-
- /**
- * 连接建立成功调用的方法
- */
- @OnOpen
- public void onOpen(Session session, @PathParam("uid") String uid) {
- sessionMap.put(uid, session);
- log.info("有新用户加入,uid={}, 当前在线人数为:{}", uid, sessionMap.size());
- Dict dict = Dict.create().set("nums", sessionMap.size());
- sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端
- }
-
- /**
- * 连接关闭调用的方法
- */
- @OnClose
- public void onClose(Session session, @PathParam("uid") String uid) {
- sessionMap.remove(uid);
- log.info("有一连接关闭,uid={}的用户session, 当前在线人数为:{}", uid, sessionMap.size());
- Dict dict = Dict.create().set("nums", sessionMap.size());
- sendAllMessage(JSONUtil.toJsonStr(dict)); // 后台发送消息给所有的客户端
- }
-
- /**
- * 收到客户端消息后调用的方法
- * 后台收到客户端发送过来的消息
- * onMessage 是一个消息的中转站
- * 接受 浏览器端 socket.send 发送过来的 json数据
- * @param message 客户端发送过来的消息
- */
- @OnMessage
- public void onMessage(String message, Session fromSession, @PathParam("uid") String uid) throws JsonProcessingException {
- log.info("服务端收到用户uid={}的消息:{}", uid, message);
- // 处理msg
- // 存储数据库
- // 添加创建时间
- if (staticUserService == null) {
- return;
- }
- User user = staticUserService.getOne(new QueryWrapper<User>().eq("uid", uid));
- if (user == null) {
- log.error("获取用户信息失败,uid={}", uid);
- return;
- }
-
- Im im = Im.builder().uid(uid).username(user.getName()).avatar(user.getAvatar()).sign("")
- .createTime(LocalDateTime.now()).text(message).build();
- // 存储数据到数据库
- staticImService.save(im);
- String jsonStr = new ObjectMapper().writeValueAsString(im); // 处理后的消息体
- this.sendAllMessage(jsonStr);
- log.info("发送消息:{}", jsonStr);
- }
-
- @OnError
- public void onError(Session session, Throwable error) {
- log.error("发生错误");
- error.printStackTrace();
- }
-
- /**
- * 服务端发送消息给除了自己的其他客户端
- */
- private void sendMessage(Session fromSession, String message) {
- sessionMap.values().forEach(session -> {
- if (fromSession != session) {
- log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);
- try {
- session.getBasicRemote().sendText(message);
- } catch (IOException e) {
- log.error("服务端发送消息给客户端异常", e);
- }
- }
- });
- }
-
- /**
- * 服务端发送消息给所有客户端
- */
- private void sendAllMessage(String message) {
- try {
- for (Session session : sessionMap.values()) {
- log.info("服务端给客户端[{}]发送消息{}", session.getId(), message);
- session.getBasicRemote().sendText(message);
- }
- } catch (Exception e) {
- log.error("服务端发送消息给客户端失败", e);
- }
- }
- }
- @Component
- @Aspect
- @Slf4j
- public class LogAspect {
-
- @Resource
- private ILogService logService;
-
- @Around("@annotation(autoLog)")
- public Object autoLog(ProceedingJoinPoint joinPoint, AutoLog autoLog) throws Throwable {
- long beginTime = SystemClock.now();
- //执行方法
- Object result = joinPoint.proceed();
- //执行时长(毫秒)
- long time = SystemClock.now() - beginTime;
- // 操作
- String name = autoLog.value();
- HttpServletRequest request = getRequest();
- // 请求的url
- String url = request.getRequestURL().toString();
- if (url.contains("/file/download")) {
- return result;
- }
- // 请求参数
- String params = "";
- Object[] args = joinPoint.getArgs();
- if (args.length > 0) {
- Object arg0 = args[0];
- if (arg0 instanceof MultipartFile) {
- params = "文件流";
- } else if (arg0 instanceof String || arg0 instanceof Long || arg0 instanceof Integer) {
- params = arg0.toString();
- } else {
- params = JSONUtil.toJsonStr(args[0]);
- }
- }
- // 返回数据
- String returnValue = JSONUtil.toJsonStr(result);
- if (returnValue.length() > 1000) {
- returnValue = "数据过大,返回状态码:" + JSONUtil.parseObj(returnValue).getStr("code");
- }
- // ip 和地址
- Dict ipAndCity = IpUtils.getIPAndCity();
- String ip = ipAndCity.getStr("ip");
- String city = ipAndCity.getStr("city");
- // 操作人
- String username = "";
- User user = SessionUtils.getUser();
- if (user != null) {
- username = user.getUsername();
- }
- // 保存到数据库
- Log log = Log.builder().name(name).params(params).output(returnValue).url(url).ip(ip)
- .address(city).duration((int) time).username(username).build();
- logService.save(log);
- return result;
- }
-
- private HttpServletRequest getRequest() {
- return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- }
-
-
- }
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。