当前位置:   article > 正文

Java websocket + redis 实现多人单聊天室,多人多聊天室, 一对一聊天_websocket 多人协同 java 多节点redis会话

websocket 多人协同 java 多节点redis会话

多人,单聊天室版

FEATURE

  1. 多人聊天, 界面简洁美观, 使用ueditor支持发送文字,图片信息
  2. 群聊成员列表, 登入登出公告
  3. 存储聊天记录, 查看历史消息

技术点

  1. 使用CopyOnWriteMap存储websocketServer对象,线程安全
  2. redis存储消息记录
  3. ConcurrentLinkedQueue存储聊天成员

TODO

  1. 没有处理高并发,高并发情况对服务器和内存都会产生极大压力 解决方案 采取实现分布式
  2. 当前是所有成员在一个聊天室,计划按照聊天室ID隔离出多聊天室(使用Redis存储)

主逻辑代码
  1. @ServerEndpoint(value="/websocketServer", configurator=SpringConfigurator.class, encoders = { CommonMessageEncoder.class, SystemMessageEncoder.class, HistoryMessageEncoder.class})
  2. public class WebsocketServer {
  3. //存储每个客户端对应的websocketServer实例与登录名map
  4. private static CopyOnWriteMap<WebsocketServer, String> webSocketUsernameMap = new CopyOnWriteMap<WebsocketServer, String>();
  5. private MessageDao messageDao = (MessageDao)ContextLoader.getCurrentWebApplicationContext().getBean("messageDao");
  6. //在线成员
  7. private static ConcurrentLinkedQueue<String> members = new ConcurrentLinkedQueue<String>();
  8. //每个webscoket客户端与服务器会话
  9. private Session session;
  10. public WebsocketServer() {
  11. }
  12. @OnOpen
  13. public void onOpen(Session session) {
  14. this.session = session;
  15. }
  16. @OnClose
  17. public void onClose() {
  18. String username = webSocketUsernameMap.get(this);
  19. removeMember(username);
  20. webSocketUsernameMap.remove(this);
  21. for (WebsocketServer webSocket : webSocketUsernameMap.keySet()) {
  22. try {
  23. sendMsg(webSocket, new SystemMessageResponse(MessageType.SYS_MSG, username, "exit", members));
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  29. @OnMessage
  30. public void onMessage(String message, Session session) {
  31. JSONObject messageObject = new JSONObject(message);
  32. String type = messageObject.getString("messageType");
  33. String content = messageObject.getString("message");
  34. if (type.equals(MessageType.COM_MSG)) {
  35. //群发消息
  36. Date time = new Date();
  37. Sim
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/325535
推荐阅读
相关标签
  

闽ICP备14008679号