SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

时间:2024-03-21 19:50:36

源码下载:https://download.csdn.net/download/woailol930910/10344278

其中包含了部分未完成的代码生成东西(学习用)

建议先下载源码再看博客

如果中间有问题可以留言或者邮箱[email protected]

大家一起学习一起进步

页面有点丑,希望大家不要介意

展示:

    SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

有离线消息:

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

读取离线消息:

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

3个聊天室互不干扰,第一个input是与谁的聊天室,下面那个360浏览器的聊天室跟第一个谷歌聊天室的都是对同一个人发的,2号只会收到10号发的消息,下面的消息会出现在列表上显示有已读信息

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

数据库:

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

当时我想把websocket聊天室提成一个可以引入的jar形式,但是我怕大家下载了源码无法运行,我就直接上传了整个项目

需要修改:

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

这2个文件的数据路径(比较麻烦SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

代码:

当时在做这个项目时遇到个问题,就是怎么把消息发送给用户列表,使其能监视是否在线和是否有消息未读,并且不影响聊天室。

后面我想到个办法为什么不在2个页面启动同一个websocket,存储不同的session

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰这2个js中我都创建了websocket

在启动中保存session

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

这个时候有个问题:我怎么区别是哪一个websocket发起的连接信息

通过搜索我发现可以再链接路径上加入可以传入后台onOpen的参数

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

2个不同的参数

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

通过websocket自带的获取类型,才区分了2个不同的webscoket

现在连接问题解决了

接下来的问题是怎么区别发送的是什么消息

消息内容分为:

1.上线消息

2.离线消息

3.有未读消息

4.把未读消息已读

我使用了一个笨办法使用:标志

当然在那之前我们需要在发送消息方法中 区分是发送一个哪一个websocket的session

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

判断是不是聊天窗口发送的消息

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰

判断是不是用户列表显示的消息

在前台我会去判断

SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰SpringMVC+MyBatis+websocket聊天室 可实现1V1聊天 多个聊天互不干扰等...

然后进行不同的操作

解决上面的问题,基本可以实现聊天室1V1的基本操作了,接下来就是基本的CSS、JS编写,这里就不说了