我做java的简易聊天室,已经可以群聊和私聊,如何把创建房间加进去,且...

发布网友 发布时间:2022-04-24 06:20

我来回答

3个回答

懂视网 时间:2022-05-15 15:37

本文主要介绍了vue+socket.io+express+mongodb 实现简易多房间在线群聊示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。希望能帮助到大家。

项目简介

主要是通过做一个多人在线多房间群聊的小项目、来练手全栈技术的结合运用。

项目源码:chat-vue-node

主要技术: vue2全家桶 + socket.io + node(express) + mongodb(mongoose)

环境配置: 需安装配置好 node,mongodb环境; 建议安装 Robomogo 客户端来管理mongodb数据。

编译运行:

1.开启MongoDB服务,新建命令行窗口1:


mongod

2.启动服务端node,新建命令行窗口2:


cd server
node index.js

3.启动前端vue页面


cd client
cnpm install
npm run dev

然后在浏览器多个窗口打开 localhost:8080,注册不同账号并登录、即可进行多用户多房间在线聊天。

主要效果预览:

代码目录概览


|--chat-vue-node
 |--client // 前端客户端:基于 vue-cli 搭建的所有聊天页面
 |--server // 后台服务端
 |--api.js // express 通过 mongoose 操作 mongodb 数据库的所有接口
 |--db.js // 数据库初始化、Schema数据模型
 |--index.js // 后台服务启动入口
 |--package.json
 .gitignore
 README.md

soeket.io 基础

soeket.io 在该项目中用到的基本功能如下(详情请看GitHub中的chatGroup.vue、server/index.js这两文件代码):


数据结构设计

主要有三个数据结构模型:


vue-router 路由设计

页面路由的跳转全部由前端的 vue-router 处理,页面功能少而全、仅3个:注册登录页、个人中心页、群聊页


vuex 全局状态

主要是通过vuex来全局管理个人账号的登录状态、当前所在群聊房间的信息:


在全局中更新state、获取state:


数据库接口api


更多详细的实现,请看 源码chat-vue-node ,里面保留着开发摸索时的很多注释。

热心网友 时间:2022-05-15 12:45

我说下思路:
1、客户端创建房间时给每个房间分配惟一的一个房间ID,房间是公开的,每个连接的客户端都可以看到,房间属性,比如密码,比如黑名单,房间保存在Server内存当中,如果你使用了集群,建议存储到分布式缓存当中(Redis是最好的选择,其次是memcached),当创建完成后,将房间信息发送给所有客户端。新客户端连接进来时,客户端要主动从服务端拉取房间信息。建议采用服务端主动通知(房间增减,服务端主动通知给所有客户端)和客户端定时轮询(客户端起个定时任务,每隔一定时间主动向服务端拉取房间列表)的方式来保证房间列表的动态更新。
2、当客户端选择加入房间时,如果设置有加入条件,比如密码,那就提示客户端输入,如果是其他条件就判断加入客户端是否符合这个条件。服务端保存房间同客户端的关联关系(可以设计成一对多,也就是一个客户端只能在一个房间聊天,也可以设计成多对多,一个客户端可以同时加入多个房间聊天,主要看设计),并将这个消息通知给这个房间所有的客户端列表“欢迎***进入房间”(消息的发送者为系统,房间ID这个房间的ID,接收人无,表示是这个房间的公开消息,消息内容即:欢迎***进入房间。)
3、把聊天内容当成消息的话,那消息应该有这样的属性,发送人,房间ID(如果没有房间ID就当成系统公告消息,在所有房间显示),接收人(如果没有指定接收人,则是公开消息,如果有接收人,就是私聊消息,只能在同一个房间私聊,那在发消息的时候要判断下接收客户端的是否在这个房间列表当中)。
4、再来说消息路由设置,当客户端发送消息时,根据房间ID,找到这个这个房间内所有的客户端列表,如果没有指定接收人,那消息就推送给这个房间关联的所有客户端,如果指定有接收人,接收人不在这个房间,直接提示“***已经离开”,如果还在就把消息推送给这个指定的客户端。
5、房间的管理:踢人,把这个客户端从房间同客户端关联关系解除,并在房间显示消息“***被踢出房间”等等

热心网友 时间:2022-05-15 14:03

把所有已创建的房间存入数据库、
查看已建立的房间就读数据追问....我这个用不到数据库

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com