Skip to content

辞职转行选手,为写简历简单撸点小代码,初步找工作用。

License

Notifications You must be signed in to change notification settings

srackhall/ChatQ_Q

Repository files navigation

ChatQ_Q

辞职转行选手,为写简历简单撸点小代码,初步找工作用,不然简历太空又没相关工作经验的话不太好整。

简单说一下:
  • 服务端:使用基于Tcp并发的编程方式,模仿QQ对一些基础功能 做了简单的实现,如:好友功能、聊天功能(好友聊天 或 群聊)、简单的文件传输功能等等......

  • 客户端: 使用Qt的socket网络编程,事件,信号与槽,基本控件等Qt框架资源 + 简单的逻辑代码实现。

  • 其他:交互使用json,自己做协议方案;数据持久化使用mysql数据库。

总结下实现思路:
  • 基于Tcp并发的实现方法很多,多进程,多线程,io多路复用等都可以。最后采用了epoll+多线程地模式。

  • 由于聊天功能实时性要求相对较低,而进程开销过大,用多线程的话达到一定数量时的总的上下文切换浪费时间会很大,并发能力一定程度上比不上io复用,故采用epoll的方式实现,但由于文件传输有可能影响正常聊天,故使用新线程新连接的方式独立出去传输,用到了之前写地线程池。

  • 最后由于对epoll的理解可能不太够地原因,总会产生一些小错误,一些细节很难覆盖的到。/比如举个小例子,epoll采用边沿触发,然后使用非阻塞 io,这时调用 send 发送数据返回-1 时,就需要对全局变量 errno 的错误信 息进行处理,若是 EAGAIN 为缓冲区已满,这时就需要记录写入位置方便 epoll 对缓存区可写状态进行监测与通知后,高效稳定的 发送数据信息。/

  • 因此服务框架就直接使用了libevent开源库封装好的epoll来快速编写,随后把精力更多的投入逻辑代码的实现。

  • 对于epoll地学习与练习,还有一些其他高性能优秀开源服务器框架源码的学习,即使工作了也不能懈怠,争取不断地提升自我。

如果打算运行一下本项目

先来看一下server的目录结构

server/
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.16.3
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeOutput.log
│   │   ├── CMakeTmp
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   ├── Q_Q-Server.dir
│   │   └── TargetDirectories.txt
│   ├── cmake_install.cmake
│   ├── compile_commands.json
│   └── Makefile
├── CMakeLists.txt
├── databaseQ_Q.cpp
├── databaseQ_Q.h
├── listQ_Q.cpp
├── listQ_Q.h
├── main.cpp
├── serverQ_Q.cpp
├── serverQ_Q.h
├── threadpool.c
└── threadpool.h

1、不难看出,在Linux下打开项目后,进入server目录,执行cmake + 指定目录 即可, 然后进入所在目录输入make命令,执行生成的makefile文件。

   由于项目简单内容较少,直接自己 gcc/g++ 也无可厚非

2、mysql需准备,名为 userName 和 groupChatName 两个数据库

3、运行第一步make编译后生成的可执行程序 ./Q_Q-Server

到此,服务器正常启动运行。


Linux使用Qt打开我写的client工程源码,编译运行后,注册/登录不受影响即一切正常

或使用我提供的windows、安卓环境的可执行程序来安装(自己复制源码到对应平台编译也可,Qt是跨平台的)

项目展示
  • 服务器启动

image


  • 登陆窗口

image

客户端启动失败的话,登录窗口是无法操作的,如下图:

image

是因为我在客户端作了判断,与服务器通信不上就使控件失能。


  • 注册窗口

  • 聊天室主窗口

image


  • 好友聊天窗口

image


  • 群聊窗口

image


  • 分别是添加好友 、创建群聊 、申请加群窗口

image


  • 发送文件窗口

image


About

辞职转行选手,为写简历简单撸点小代码,初步找工作用。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published