10000058 向 10000057 发起好友请求 10000057 收到请求,并成功添加 10000058 , 但10000057新的朋友列表没有刷新 , 10000058 朋友列表没有刷新
Qt客户端 同时能收到2条json数据,导致解析失败 暂时的解决办法是 服务端usleep 延迟发送 Qt客户端 点击添加好友后,要关闭对话框 已经完成 对流式数据进行处理 <256> </ 256>
数据库中新的好友 req_num 字段 没有更新 要么实现要么就删除了
思考要怎么实现聊天功能 发起_接收的聊天文件,文件锁, A向B发消息,创建A_B文件,点发送就是往文件里写数据,通知B接收数据, 数据库存储文件的行数 A发送消息的行数,和B发送消息的行数,相加, 聊天的用户名,时间 聊天的信息
对消息转发的数据进行限制,并写下来
接收来自客户端的数据
保持心跳 100
退出 101
请求添加某好友 102 服务器会去找是不是存在这个好友 存在就转发 不存在就直接提示
确认添加某好友 103
拒绝添加某好友 104
客户端给服务端发 请求添加A为好友 消息格式 {"t":102,"q_num":"10001","req_num":"10002"} 对应的客户端的服务端进程 转发消息 {"t":102,"q_num":"10001","req_num":"10002"} 更改消息类型为201 req_num 不存在,不在线,发到消息待处理的数据库里去,不处理 req_num 在线 转发到相应的进程进行处理 (其实在线和不在线都可以发到数据库里去)
用户登录后,不仅要获取好友列表,还有处理不在线的时候发来的消息,读取不在线的时候发来的消息, 还有待处理的消息
确定 主进程转发的消息 用json数据
待办清单 msgreport_v3 1.server.cpp 中 epoll感知IO收数据 要和 处理消息分离 epoll用一个线程单独收发数据,发到对应 fd对应的消息队列 ,然后主线程从消息队列中取一个数据处理一个数据 客户端 要限制数据发送
2.数据消息的格式要有长度限制,还有边界处理,在server中消息的固定大小是256,又固定大小就没有边界了
3.User创建进程,要思考怎么让父进程进行释放资源,尤其是异常结束要怎么释放资源,程序推出后怎么释放资源
服务端文件 每次编译运行都要输入一大串 所以要 采用cmake 进行管理
libhead.h 系统提供的头文件和
问题总结 old_v_20240802开始之后要重新写,要注重分模块。 服务端已经实现的功能: 1.接收来自客户端的TCP连接,并判断是不是客户端,但TCP连接没有心跳机制,需要有心跳机制,使用的是IO多路复用 2.接收来自客户端的注册请求,创建1个QQ账号,存入数据库,并返回给客户端, 数据库不防sql注入,json数据格式的问题 3.接收登录请求,去数据库中查找账号,进行密码比对,比对成功后显示登录成功
客户端已经实现的功能: 1.输入服务器的地址和端口,和服务器建立TCP连接,把注册数据打包成JSON格式发送给服务端 2.把登录请求数据打包发给服务端 3.
需要增加的功能: 把文件描述符加入 用户类中 实行绑定 从epoll中踢掉这个文件描述符
数据库要加一个好友列表,查询并返回这个列表,返回好友然后根据好友列表然后循环去找,好友 在线 和 离线的状态,返回给客户端 ,存入2份
A发送好友申请给B, B接受A的好友申请 客户端会选择1个,或者多个好友,然后发送消息,发送到服务器这里, 服务器里有当前在线的用户,所以其实不是用去数据库里找当前在线的用户
在服务器里,用户应该是占用了一片内存的 一个用户可以和多个用户建立关系的 每个用户都有1个会话列表 A给B发消息 B收到消息之后会把A发了几条消息记录下来,然后当B点的时候,然后才弹出聊天框
A和B 不拆分成进程 怎么处理 ? 拆分成进程 怎么处理? 服务器受到A的消息,存起来,然后对应服务器中的客户端A 这个数据结构,然后从消息中判断这个数据给谁的, 然后去找,把这个数据发送给谁, 比如说B 没有开辟进程,就直接调用B,存入B的数据结构里,然后发送给客户端B 这个服务器既要给A和B分开来,又要像一个中间人,发出去 应该有一个线程,来收消息,然后发消息 拆成进程,建立进程间通信,要根据在线的情况,对人员进行进程管理,用户对应一个进程, A给B发送消息 ,好友关系确定之后, B接收消息是被动 拆成进程是否有必要??? 消息有没有必要存入 用户登录之后,还要有一种机制,对用户的连接状态进行进行实时的判断,就是心跳机制
kimi 给的设计方案 设计服务端的头文件列表和它们的作用说明是一个系统化的过程。以下是一个示例列表,包括常见的头文件和它们可能的作用。请注意,实际的头文件列表将取决于你的具体需求和实现。
-
Server.h
- 主服务器类声明,包含服务器启动、停止、监听和事件循环等。
-
ConnectionManager.h
- 管理所有客户端连接的类,包括添加、删除和查找连接。
-
UserManager.h
- 用户管理类,负责用户注册、登录、注销和用户状态管理。
-
Message.h
- 消息类,定义消息的结构,包括发送者、接收者、内容和时间戳等。
-
MessageHandler.h
- 消息处理类,负责接收、解析、路由和发送消息。
-
Event.h
- 事件类,定义系统中的各种事件和事件处理接口。
-
EventHandler.h
- 事件处理类,用于注册和分发事件。
-
DatabaseManager.h
- 数据库管理类,负责数据库连接、查询和事务管理。
-
User.h
- 用户类声明,包含用户信息和行为。
-
Session.h
- 会话类,管理用户之间的会话和消息交换。
-
HeartbeatManager.h
- 心跳管理类,负责发送和接收心跳,检测用户在线状态。
-
Config.h
- 配置管理类,用于读取和存储配置信息。
-
Logger.h
- 日志记录类,用于记录系统日志。
-
NetworkUtils.h
- 网络工具类,包含网络相关的辅助函数,如地址解析、端口管理等。
-
Security.h
- 安全类,负责加密、解密和认证。
-
Protocol.h
- 通信协议定义,包括消息格式、编码和解码规则。
-
Constants.h
- 常量定义,包含系统中使用的常量,如端口号、超时时间等。
-
Types.h
- 自定义类型定义,例如枚举、结构体等。
-
EpollWrapper.h
- 对epoll的封装,提供更高层次的接口用于事件监听和管理。
-
ThreadPool.h
- 线程池管理类,用于任务调度和线程管理。
-
DTOs.h
- 数据传输对象(DTO)集合,用于模块间数据传输。
-
ServiceDiscovery.h
- 服务发现类,用于在分布式系统中定位服务。
-
API.h
- 如果服务端提供API接口,这个头文件定义API的接口和协议。
-
Client.h
- 客户端表示类,包含客户端的基本信息和行为。
-
Queue.h
- 队列类,用于实现消息队列或任务队列。
-
Middleware.h
- 中间件接口,定义系统中间件的接口和行为。
每个头文件都应该遵循单一职责原则,只声明和定义与它们功能相关的类、函数、常量等。这样,你的代码将更加模块化,易于维护和扩展。此外,确保使用前向声明和包含守卫来避免头文件间的循环依赖。
使用Qt编写的客户端应用程序通常涉及图形用户界面(GUI)、网络通信、数据模型、事件处理等方面。以下是一个示例的Qt客户端应用程序头文件列表和它们的作用说明:
-
MainWindow.h
- 主窗口类声明,通常继承自
QMainWindow,包含主窗口的布局和控件。
- 主窗口类声明,通常继承自
-
Application.h
- 应用程序类声明,继承自
QApplication,用于管理应用程序的生命周期和全局设置。
- 应用程序类声明,继承自
-
ClientWidget.h
- 客户端界面的主要控件,可能包含聊天输入框、发送按钮、消息显示区域等。
-
ChatWindow.h
- 聊天窗口类声明,用于显示聊天对话和交互。
-
ContactList.h
- 联系人列表类,管理显示用户的好友列表或联系人。
-
MessageModel.h
- 消息数据模型,用于存储和管理消息数据,通常与
QAbstractListModel或QStandardItemModel结合使用。
- 消息数据模型,用于存储和管理消息数据,通常与
-
UserManager.h
- 用户管理类,负责用户的登录、登出、用户信息的获取和更新。
-
NetworkManager.h
- 网络管理类,负责客户端与服务器之间的网络通信。
-
ChatProtocol.h
- 聊天协议类,定义客户端与服务器通信的消息格式和解析规则。
-
Settings.h
- 设置管理类,用于访问和修改应用程序的设置。
-
UserSettings.h
- 用户设置类,管理用户的个性化设置。
-
Authentication.h
- 认证类,处理用户的登录和认证过程。
-
SignalHandler.h
- 信号处理类,用于处理Qt的信号和槽机制。
-
Utils.h
- 工具类,包含一些通用的辅助函数,如字符串处理、日期时间格式化等。
-
Constants.h
- 常量定义,包含应用程序中使用的常量,如服务器地址、端口号等。
-
CustomWidgets.h
- 自定义控件声明,如果应用程序中使用了自定义的Qt控件。
-
ThemeManager.h
- 主题管理类,用于应用程序界面的主题切换。
-
Logger.h
- 日志记录类,用于记录客户端的日志信息。
-
DatabaseManager.h
- 本地数据库管理类,如果客户端需要存储数据到本地数据库。
-
NotificationManager.h
- 通知管理类,用于发送桌面通知。
-
ContactProfile.h
- 联系人资料类,用于显示和管理联系人的详细信息。
-
ChatHistory.h
- 聊天记录类,用于管理和显示聊天记录。
-
FileTransferManager.h
- 文件传输管理类,如果客户端支持发送文件。
-
ImageLoader.h
- 图片加载器,用于异步加载和显示图片。
-
SoundManager.h
- 声音管理类,用于播放通知声音或其他音效。
-
Translator.h
- 翻译管理类,用于国际化和本地化支持。
-
UpdateManager.h
- 更新管理类,用于检查和应用应用程序更新。
-
ShortcutManager.h
- 快捷键管理类,用于定义和管理快捷键。
-
ProxySettings.h
- 代理设置类,用于配置和管理网络代理。
-
CustomMenu.h
- 自定义菜单类,如果需要创建自定义的上下文菜单或工具栏。
请注意,这个列表并不是固定不变的,它应该根据你的应用程序的具体需求进行调整。Qt提供了丰富的类库和模块,你可以根据自己的需求选择合适的组件来构建你的应用程序。