广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot中webSocket如何实现即时聊天
  • 635
分享到

SpringBoot中webSocket如何实现即时聊天

2023-06-14 23:06:06 635人浏览 独家记忆
摘要

这篇文章主要介绍了SpringBoot中websocket如何实现即时聊天,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot是什么springboot一种全新

这篇文章主要介绍了SpringBootwebsocket如何实现即时聊天,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

功能 :我们的小程序是个二手交易小程序,即时聊天对于一个后台服务器只是单核2g的来说有点抗不住。所以在双方都在线的时候没有存储聊天消息,只是在单方不在线时存储了离线消息。而且只能发三条离线消息。仿照了csdn的聊天。

使用:我们是点击进入聊天之后才发起WEBSocket,这就造成了一个问题,就是用户退出到消息列表又重新点进入就会重新发送一个websocket请求。每次请求session都不一样。而且微信限制一个用户只能同时发起5个请求。一开始前端没能退出聊天页面就端开,就错误唉!!。只能后台去断使用sessioin.close()会调用onClose()方法 这个session是你要断的session。不过后来前端可以自己断了就nice了!

效果:

SpringBoot中webSocket如何实现即时聊天

SpringBoot中webSocket如何实现即时聊天

数据库设计:

对于展示消息聊天列表使用了一张表。last_context为对方发送的最后一条消息。只要有一方点击了私信进入聊天页面就会往表中插入两条记录。方便之后删除聊天,毕竟一方删除不能让另一方也看不到信息

SpringBoot中webSocket如何实现即时聊天

对于消息详细离线内容,则使用了另外一张表。

SpringBoot中webSocket如何实现即时聊天

后台代码:

package com.w.wx.controller.WebSocket;import com.alibaba.fastJSON.jsON;import com.alibaba.fastjson.JSONObject;import com.w.wx.domain.ChatMessage;import com.w.wx.service.ChatService;import com.w.wx.utils.ALToHMUtil;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.websocket.*;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.atomic.AtomicInteger;@Slf4j@ServerEndpoint("/wx/{fromOpenid}/{toOpenid}")@Componentpublic class WebSocketServer {    public static WebSocketServer webSocketServer;    @Autowired    private ChatService chatService;    @PostConstruct        //此注解的方法在bean加载前执行    private void init() {        webSocketServer = this;        //初始化时将静态化的interFaceInfoMapper进行了实例化        webSocketServer.chatService = this.chatService;    } //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。    private static AtomicInteger onlineNum = new AtomicInteger();    //concurrent包的线程安全HashMap,用来存放每个客户端对应的WebSocketServer对象。    private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();    //发送消息    public void sendMessage(Session session, ChatMessage message) throws IOException {        if(session != null){            synchronized (session) {                String s = JSONObject.toJSONString(message);                System.out.println("52 发送数据:" + s);                session.getBasicRemote().sendText(s);            }        }    }    //给指定用户发送信息    public void sendInfo(String to_openid, ChatMessage message){        Session session = sessionPools.get(to_openid);        if(session == null){            webSocketServer.chatService.aDDDeInfo(message);        }else{            try {                sendMessage(session, message);            }catch (Exception e){                e.printStackTrace();            }        }    }    // 群发消息    public void broadcast(ChatMessage message){    for (Session session: sessionPools.values()) {            try {                sendMessage(session, message);            } catch(Exception e){                e.printStackTrace();                continue;            }        }    }    //收到客户端信息后,根据接收人的username把消息推下去或者群发    // to=-1群发消息    @OnMessage    public void onMessage(String message) throws IOException{        ChatMessage msg=JSON.parseObject(message, ChatMessage.class);        sessionPools.get(msg.getToOpenid());        webSocketServer.chatService.addInfo(message);        if (msg.getToOpenid().equals("-1")) {            broadcast(msg);        } else {            sendInfo(msg.getToOpenid(),msg);        }    }    //建立连接成功调用    @OnOpen    public void onOpen(Session session, @PathParam(value = "fromOpenid") String fromOpenid,@PathParam(value = "toOpenid") String toOpenid) throws IOException {        ArrayList<ChatMessage> list = webSocketServer.chatService.getAllNotRead(fromOpenid,toOpenid);        if (!list.isEmpty()) {            Iterator<ChatMessage> it = list.iterator();            while (it.hasNext()) {                ChatMessage chatMessage = it.next();                chatMessage.setContent(ALToHMUtil.toUnicode(chatMessage.getContent()));                sendMessage(session, chatMessage);                log.info("115 当前用户接收离线消息" + chatMessage.toString());            }        }        sessionPools.put(fromOpenid, session);        addOnlineCount();        System.out.println("125 "+fromOpenid + "加入webSocket!当前人数为" + onlineNum);    }    //关闭连接时调用    @OnClose    public void onClose(@PathParam(value = "fromOpenid") String fromOpenid) throws IOException {        Session session = sessionPools.get(fromOpenid);        session.close();        sessionPools.remove(fromOpenid);        subOnlineCount();        System.out.println(fromOpenid + "断开webSocket连接!当前人数为" + onlineNum);    }    //错误时调用    @OnError    public void onError(Session session, Throwable throwable){       // System.out.println("发生错误");        throwable.printStackTrace();    }    public static void addOnlineCount(){        onlineNum.incrementAndGet();    }    public static void subOnlineCount() {        onlineNum.decrementAndGet();    }        public static AtomicInteger getOnlineNumber() {        return onlineNum;    }        public static ConcurrentHashMap<String, Session> getSessionPools() {        return sessionPools;    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringBoot中webSocket如何实现即时聊天”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: SpringBoot中webSocket如何实现即时聊天

本文链接: https://www.lsjlt.com/news/275576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot中webSocket实现即时聊天
    即时聊天 这个使用了websocket,在springboot下使用很简单。前端是小程序,这个就比较坑,小程序即时聊天上线需要域名并且使用wss协议,就是ws+ssl更加安全。但是要...
    99+
    2022-11-12
  • SpringBoot中webSocket如何实现即时聊天
    这篇文章主要介绍了SpringBoot中webSocket如何实现即时聊天,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot是什么springboot一种全新...
    99+
    2023-06-14
  • SpringBoot整合websocket实现即时通信聊天
    目录一、技术介绍1.1 客户端WebSocket1.1.1 函数1.1.2 事件1.2 服务端WebSocket二、实战 2.1、服务端2.1.1引入maven依赖2.1....
    99+
    2022-11-13
  • 使用php开发Websocket,实现即时聊天功能
    使用PHP开发Websocket,实现即时聊天功能Websocket是一种全双工通信协议,适用于实时通信场景,比如即时聊天、实时数据更新等。PHP作为一种流行的服务器端编程语言,也可以通过相关库和扩展来实现Websocket功能。在本文中,...
    99+
    2023-12-09
    PHP开发 Websocket实现 即时聊天功能
  • springboot结合websocket聊天室实现私聊+群聊
    目录 先看效果 后端代码 前端代码 先看效果 一人分饰多角(bushi) 后端代码 先引入websocket依赖 <!-- websocket消息推送 -->...
    99+
    2022-11-13
  • java怎么实现即时聊天
    在Java中,可以使用Socket来实现即时聊天功能。具体步骤如下:1. 创建一个ServerSocket对象来监听客户端连接请求。...
    99+
    2023-10-09
    java
  • Springboot+WebSocket实现在线聊天功能
    目录一、后端二、Websocket三、前端一、后端 1.在Springboot项目的pom.xml中添加依赖 <!--websocket协议--> <depende...
    99+
    2023-02-14
    Springboot WebSocket在线聊天 Springboot WebSocket聊天 Springboot WebSocket
  • SpringBoot+WebSocket怎么实现在线聊天
    本篇内容主要讲解“SpringBoot+WebSocket怎么实现在线聊天”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot+WebSocket怎么实现在线聊天”吧!在线聊天使用...
    99+
    2023-06-19
  • SpringBoot怎么实现WebSocket即时通讯
    这篇“SpringBoot怎么实现WebSocket即时通讯”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoo...
    99+
    2023-06-30
  • 如何用PHP websocket实现网页实时聊天
    目录前言websocket简介与http的关系握手数据传输PHP 实现 websocket 服务器文件描述符创建服务器socket服务器逻辑客户端创建客户端页面功能用户名异步处理总结...
    99+
    2022-11-12
  • go语言如何实现即时通讯聊天室
    本文小编为大家详细介绍“go语言如何实现即时通讯聊天室”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言如何实现即时通讯聊天室”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现的功能:公聊,私聊,修改用户名...
    99+
    2023-06-30
  • PHP中如何进行即时聊天开发?
    随着即时通讯技术的不断发展,越来越多的网站和应用程序开始提供即时聊天功能。对于一个有经验的开发者来说,开发一个即时聊天功能似乎并不是很困难。本文将探讨如何在PHP中进行即时聊天开发,帮助初学者和有经验的开发者完成这一任务。一、什么是即时聊天...
    99+
    2023-05-22
    开发 PHP 即时聊天
  • websocket+Vuex实现一个实时聊天软件
    目录前言一、效果如图二、具体实现步骤1.引入Vuex2.webscoked实现总结前言 这篇文章主要利用websocked 建立长连接,利用Vuex全局通信的特性,以及watch,c...
    99+
    2022-11-12
  • Node.js websocket如何使用socket.io库实现实时聊天室
    这篇文章主要介绍Node.js websocket如何使用socket.io库实现实时聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!认识websocketWebSocket p...
    99+
    2022-10-19
  • SpringBoot整合WebSocket实现聊天室流程全解
    目录什么是WebSocket WebSocket通信模型为什么需要WebSocketWebsocket与http的关系SpringBoot集成WebSocket什么是Web...
    99+
    2023-01-04
    SpringBoot整合WebSocket实现聊天室 SpringBoot WebSocket聊天室
  • SpringBoot+WebSocket实现多人在线聊天案例实例
    目录1.pom.xml2.消息实体类3.controller4.WebSocket的配置文件5.前端发送消息页面6.测试6.1.客户端A6.2.客户端B1.pom.xml <x...
    99+
    2022-11-13
  • 如何利用html5的websocket实现websocket聊天室
    这篇文章主要讲解了“如何利用html5的websocket实现websocket聊天室”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用html5的we...
    99+
    2022-10-19
  • Node.js websocket使用socket.io库实现实时聊天室
    认识websocket WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duple)。一开始的握手需要借助HTTP请求完成。 其实websocke...
    99+
    2022-06-04
    实时 聊天室 js
  • websocket+node.js如何实现实时聊天系统问题咨询
    小编给大家分享一下websocket+node.js如何实现实时聊天系统问题咨询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1...
    99+
    2022-10-19
  • SpringBoot+WebSocket实现即时通讯的方法详解
    目录环境信息服务端实现导入依赖创建配置类创建一个注解式的端点并在其中通过配套注解声明回调方法服务端主动发送消息给客户端客户端实现Java客户端实现在前端环境(vue)中使用webso...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作