项目地址:https://gitee.com/yiyefangzhou24/pangolin-im
PangolinIM
介绍
PangolinIM是一款端对端加密的即时通讯工具。有服务器端和安卓客户端,支持文本消息、图片发送、文件发送、语音发送。
特点
PangolinIM是一款端对端加密即使通讯工具,采用DH算法协商密钥,通讯内容通过AES加密算法加密,服务器不存放消息明文。通讯逻辑分2种方式:
1.如通讯双方均在线。服务器仅仅做消息转发(依托redis数据库实现消息队列);
2.接收客户端不在线。服务器使用mariadb数据库缓存消息内容(存储密文,不解密),待客户端上线后发送给客户端,并删除消息原文。
功能列表
包含以下功能:
- 注册
- 登录
- 查找好友
- 添加好友
- 好友列表
- 单人聊天功能(包括发文字、图片)
- 修改密码
- 断线重连
部分开发文档
依赖的开发和运行环境
聊天服务器
如果您是centos 7系统,可直接运行PangolinServer/env_install.sh来配置开发和运行环境。
-
安装cmake、makefile和gcc。
make 版本需要在 3.21.3 及以上,gcc 版本需要在 2.6 及以上。
根据CmakeFiles.txt规则,所有第三方库(mariadb、hiredis、libevent)的头文件都需要存放或者软链接于/usr/local/include文件夹中,库文件都需要存放于/usr/local/lib文件夹中。
-
安装redis数据库和c语言链接库hiredis。
redis数据库用于存放临时的高速交换的信息,包括客户端临时访问令牌、libevent句柄、消息队列。
数据库0:消息队列。采用redis发布/订阅模式
数据库1:客户端临时访问令牌、最新上线时间、libevent句柄,key为用户uid,value为json格式{"key":"key","time":1633873249,"fd":12}
数据库2:临时好友关系。采用redis的zadd/zrange模式
hiredis为redis的c语言链接库,包括头文件和库文件,make install命令仅自动拷贝库文件,头文件需要链接或者拷贝到/usr/local/include中。
-
安装 mysql(Mariadb)。
使用的数据库是mariadb,需要安装 mariadb-server、mariadb-client 和 mariadb-devel。
聊天服务 chatserver 会使用到 mariadb(配置信息位于 pangolinServer/chatServer/etc/config),mariadb数据库用于存放持久化信息,包括用户信息(包括UID、用户名、密码等)、好友关系、离线聊天记录。pangolin目前使用的3个表分别是:
表名 用途说明 user 用户信息表 user_relationship 好友关系表 chatmsg 离线消息记录表 安装完毕之后,需要自行创建utf-8数据库pangolin,并创建对应的表,建表语句在PangolinServer/table.sql文件中
-
编译安装Libevent
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz tar zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure -prefix=/usr/local make && make install
文件服务器
文件服务器因不需要长连接,故采用php的文件上传方式。需要安装Apache 2.4及以上,安装php 5.4。php需要安装mysql和redis扩展。
此聊天软件的文件传输需要服务器介入暂存文件,文件并不是绝对安全的。可以配置HTTPS来提高传输安全性。
建议将临时文件存放于apache的访问目录以外(修改function.php的UP_DIR),避免用户绕过php直接访问文件本身。
编译和运行方法
聊天服务器编译及运行
进入 pangolinServer/chatServer 目录,执行:
cmake . && make
如果没有错误,会产生 chatserver文件,可以直接在 Linux 中单独启动,也可以以使用如下命令后台启动:
./chatserver > nohup_chatserver.log 2>&1 &
配置文件在目录文件etc/config,可手动修改消息服务器端口、数据库连接配置等。
文件服务器安装及运行
进入 pangolinServer/fileServer 目录,将所有的文件拷贝至apache的根目录即可。
安装完毕后,请使用http://[IP]/check.php检测环境是否正确
使用的端口说明
可以使用一下 lsof -i -Pn
命令查看端口是否处于正常侦听状态,端口号及作用如下:
端口号 | 所属服务 | 用途说明 |
---|---|---|
20000 | chatserver | 聊天端口 |
80(根据apache设定) | fileserver | 文件服务端口 |
客户端编译环境
客户端使用AndroidStudio编译,具体环境参数如下:
Android Studio Arctic Fox | 2020.3.1 Patch 2 Build #AI-203.7717.56.2031.7678000, built on August 27, 2021 Runtime version: 11.0.10+0-b96-7281165 x86_64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. macOS 10.15.7 GC: G1 Young Generation, G1 Old Generation Memory: 1280M Cores: 4 Registry: external.system.auto.import.disabled=true Non-Bundled Plugins: Statistic
运行截图
联系方式
如果您在使用这个项目的过程中遇到任何问题,或者您对我的项目有任何意见或者建议,再或者有不错的想法欢迎与我交流,可以加我微信 to_be_listener,您也可以给我发邮件:yiyefangzhou24@qq.com。